Fork cria um novo processo. O processo recém-criado é um processo filho. É uma cópia do código subsequente do processo pai. Geralmente é usado como um servidor de vários processos.
Use getpid para determinar se o processo atual é um processo filho ou um processo pai.
Considere o seguinte exemplo:
A seguir está o conteúdo citado:
#include <sys/types.h> #include <unistd.h> #include <stdio.h> int principal() { pid_t pid; estático int n = 0; printf("garfo!n"); mudar (pid = garfo ()) { caso-1: { /* ..pid.-1.fork.... */ /* ....... */ /*..........*/ perror("A bifurcação falhou!"); quebrar; } caso 0: { /* pid.0.... */ printf("[criança]eu sou criança!n"); printf("[filho]getpid=[%d]n", getpid() ); printf("[filho]pid=[%d]n", pid); quebrar; } padrão: { /* pid..0.... */ printf("[pai]eu sou pai!n" ); printf("[parent]getpid=[%d]n",getpid() ); printf("[pai]pid=[%d]n",pid ); quebrar; } } printf("n=[%d]n",n++); retornar 0; } |
Este exemplo é compilado com gcc no Linux e os resultados da execução são os seguintes:
A seguir está o conteúdo citado:
garfo! [criança] eu sou criança! [criança]getpid=[7422] [criança]pid=[0] n=[0] [pai] eu sou pai! [pai]getpid=[7421] [pai]pid=[7422] n=[0] |