Quais códigos são copiados para o processo filho?

0

Se chamarmos o método fork () dentro de uma instrução if, o processo filho gerado entra na instrução else?

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>

int main(void){
    int c = rand() % 50;

    if( c == 0 ){
        int k = fork();
    }
    else{
        printf("ELSE");
    }

    return 0;
}

Depois que o fork () é executado, o filho processa a mensagem "ELSE"?

    
por Goktug 04.03.2018 / 20:23

1 resposta

3

Não.

O processo filho se encontrará exatamente no mesmo ponto no código que o pai no momento do fork() . A única diferença no estado de pai e filho é o valor de retorno da chamada fork() , atribuído a k em seu código (isso manterá o PID do filho no processo pai e será zero na processo filho). Se o fork() acontecer, nem o pai nem o filho alcançarão a instrução printf() .

A maneira usual de fazer um fork() é

pid_t pid;

pid = fork()

if (pid == 0) {
    /* child process code */
    /* including exit()   */
} else {
    /* parent process code           */
    /* including waitpid() or wait() */
}
    
por 04.03.2018 / 20:26

Tags