Processo e método fork ()

1

Sou novo em Sistemas Operacionais e Linux, portanto, essa pode ser uma pergunta muito básica, mas não consigo encontrar uma resposta.

De acordo com os recursos que li até agora, o método fork() cria um novo processo gerando uma chamada do sistema para o sistema operacional. O processo criado é uma cópia exata do processo de chamada.

No entanto, acho que o processo criado (filho) e o processo de chamada (pai) não são exatamente iguais. Os códigos antes do método fork() no processo pai não são copiados para o processo filho.

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

int main(void){
   X
   int child1 = fork();
   A
   B
   C
   D
   int child2 = fork();
   E
   F
   return 0; 
}

O processo child2 não contém as linhas de código A B C D, enquanto o processo child1 contém todas as linhas, exceto X. Na verdade, este é o meu pensamento. Por outro lado, em todos os lugares, diz-se que o processo filho é uma cópia exata do processo pai.

Alguém pode dizer qual delas é verdadeira?

    
por Goktug 03.03.2018 / 22:01

1 resposta

2

fork() "retorna duas vezes". No processo pai, ele retorna o PID do filho. No processo filho, ele retorna zero. Isto está assumindo que não houve erros. Isso significa que seu código, fazendo dois garfos, resultará em um total de quatro processos.

Os processos são idênticos em todas as formas, exceto nas formas descritas em fork(2) ( man 2 fork ).

Por exemplo, no código

while (1) {
   A
   B
   C
   fork();
}

as declarações A , B e C serão executadas por um número cada vez maior de processos (na verdade, não escreva código como este, ele pode travar o sistema).

No seu exemplo, as instruções também existirão para execução pelos processos filhos, mas não há caminho de código que retorne a essas instruções. O processo filho, uma vez que é idêntico ao pai no momento da chamada para fork() , começará a executar no ponto no código onde o fork() foi chamado.

    
por 03.03.2018 / 22:15

Tags