Pergunta

ao compilar este código, e isso eu obter um resultado "PAI" aparece antes de "CRIANÇA".Para obter informações eu estou no Linux Mint.

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

void main(){

pid_t pidc ;
pidc = fork();

if(pidc < 0)
{printf("error !\n");}

else if(pidc == 0){
        printf("I am the child process! \n");
            }
else{
        printf("I am the parent process! \n");
     }
}

e o Resultado foi esse:

Eu sou o processo pai!

Eu sou o processo filho!

Assim, alguém tem uma idéia ?e graças.

Foi útil?

Solução

Você pode estar confuso porque o filho do processo if condição ocorre antes do pai if condição.

Quando você chamar fork(), seu processo existente será clonado em um novo processo.O processo original irá receber um valor de retorno da criança e do PID do fork() chamada, a criança vai receber um PID de 0.

Após o fork() sucede, os dois processos serão executados em paralelo, de forma eficaz.Para executar em paralelo, os processos são dadas pequenas fatias de tempo durante o qual eles executam, e no final da execução são temporariamente congelados, enquanto o outro executa o processo.Você não tem nenhuma maneira de saber qual dos dois processos serão agenda executado em primeiro lugar.O pai e o filho processo irá executar o mesmo código que começa após a fork() chamada, mas, devido à diferença no valor da pidc eles vão escolher diferentes ramos da if instrução.Portanto, ele é o primeiro processo que acontece para ser dada uma fatia de tempo de execução que irá saída do primeiro, a ordem dos if instrução não é relevante.

Outras dicas

Uma vez que você tenha forked, a resultante de dois processos executados em grande parte de forma independente.Você não consegue assumir o pai será executado antes que a criança (ou vice-versa) sem a adição de algum mecanismo para forçar a fazê-lo.

Ele é chamado a uma condição de corrida.Você precisa ter um mecanismo para sincronizar os dois processos.

Eu só tenho a adicionar uma 'wait(NULL)', obrigado por tudo.

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

void main(){

pid_t pidc ;
pidc = fork();

if(pidc < 0)
{printf("error !\n");}

else if(pidc == 0){
        printf("I am the child process! \n");
            }
else{
       wait(NULL);
       printf("I am the parent process! \n");
     }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top