A função Fork no Linux Mint
-
22-12-2019 - |
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.
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 fork
ed, 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");
}
}