Mas os processos da criança e dos pais residem em diferentes espaços de memória. Esses espaços de memória têm o mesmo conteúdo e qualquer operação executada por um processo não afetará o outro processo.
Quando a criança processos é criada; Agora, ambos os processos terão o mesmo contador de programas (PC), então esses dois processos apontarão para a mesma próxima instrução. Os arquivos abertos pelo processo pai serão os mesmos para o processo infantil.
O processo infantil é exatamente o mesmo que seus pais, mas há diferença nos IDs de processos:
Propriedades do processo infantil
A seguir, são apresentadas algumas das propriedades que um processo infantil possui:
Propriedades que não são herdadas pelo processo infantil
A seguir, são apresentadas algumas das propriedades que não são herdadas por um processo infantil:
garfo () em C
Não há argumentos no fork () e o tipo de retorno de garfo () é inteiro. Você deve incluir os seguintes arquivos de cabeçalho quando o Fork () é usado:
#incluirAo trabalhar com fork (), pode ser usado para tipo pid_t Para processos, o IDs como pid_t é definido em .
O arquivo de cabeçalho é onde o Fork () é definido, então você deve incluí -lo no seu programa para usar o Fork ().
O tipo de retorno é definido e a chamada fork () é definida em . Portanto, você precisa incluir os dois no seu programa para usar o System Call ().
Sintaxe do garfo ()
A sintaxe do sistema Fork () Sistema no Linux, o Ubuntu é o seguinte:
pid_t fork (void);Na sintaxe, o tipo de retorno é pid_t. Quando o processo infantil é criado com sucesso, o PID do processo infantil é devolvido no processo pai e 0 será devolvido ao próprio processo infantil.
Se houver algum erro, -1 será devolvido ao processo pai e o processo infantil não será criado.
Nenhum argumento é passado para o Fork ().Exemplo 1: Calling Fork ()
Considere o exemplo a seguir, no qual usamos o sistema Fork () para criar um novo processo infantil:
#incluirSAÍDA:
sysads@linuxhint $ GCC Fork.C -O ForkNeste programa, usamos fork (), isso criará um novo processo infantil. Quando o processo infantil é criado, o processo pai e o processo filho apontam para a próxima instrução (o mesmo contador do programa). Dessa maneiran vezes, onde n é o número de chamadas do sistema de bifurcação ().
Então, quando a chamada do garfo () é usada uma vez como acima (21 = 2) Teremos nossa saída 2 vezes.
Aqui quando a chamada do sistema Fork () for usada, a estrutura interna será:
Considere o seguinte caso em que o garfo () é usado 4 vezes:
#incluirSaída:
sysads@linuxhint $ GCC Fork.C -O ForkAgora o número total de processos criados são 24 = 16 e temos nossa declaração de impressão executada 16 vezes.
Exemplo 2: Teste se o garfo () foi bem -sucedido
No exemplo seguinte, usamos o construto de tomada de decisão para testar o valor (int) retornado pelo garfo (). E as mensagens correspondentes são exibidas:
#incluirSAÍDA:
sysads@linuxhint $ GCC Fork.C -O ForkNo exemplo acima, usamos o tipo pid_t que armazenará o valor de retorno do garfo (). fork () é chamado on -line:
p = fork ();Portanto, o valor inteiro retornado por Fork () é armazenado em P e depois P é comparado para verificar se nossa chamada Fork () foi bem -sucedida.
Quando a chamada fork () é usada e a criança for criada com sucesso, o ID do processo infantil será devolvido ao processo dos pais e 0 será devolvido ao processo infantil.O ID do processo infantil no processo dos pais não será o mesmo que o ID do processo infantil no próprio processo infantil. No processo infantil, o ID do processo infantil será 0.
Com este tutorial, você pode ver como começar com o sistema de garfo no Linux.