Se il processo principale ha pid A e B - F sono sottoprocessi PID, quindi:
A spawns B i=0
A spawns C i=1
C run from 'fork' i=1
C spawns D i=2
B run from 'fork' i=0
B spawns E i=1
D run from 'fork' i=2
E run from 'fork' i=1
E spawns F i=2
F run from 'fork' i=2
Dove i
è il valore della i
del (sotto) processo di contesto. Poiché fork
crea una copia esatta del processo in esecuzione, verrà copiata anche la variabile i
. Quando A spawns B, i
è 0. Quando A spawns C, i
è 1. Il processo A ora esce dal ciclo for poiché i == 1.
Ora il sottoprocesso C inizia a funzionare, con i
== 1. Si noti che non si romperà all'interno del ciclo for da fork(), in C punto di spawning, restituisce 0. Al contrario, looping, aumentando i
in 2, spawn D e exit a causa delle condizioni del ciclo for.
Il sottoprocesso B ha i
== 0, quando viene avviato. Genera il sottoprocesso E e si interrompe all'interno del ciclo. (I == 1)
E così via ...
Quando si tyring di scoprire di cosa come questi, posso darvi un consiglio:
Fai variabili intermedie e stamparle.
ho modificato il codice, in modo che esso stampa le cose che ho appena descritto:
#include <unistd.h>
#include <stdio.h>
int main(void) {
int i;
for (i= 0; i < 3; ++i) {
int f = fork();
printf("%i\tspawns\t%i\ti=%i\n", getpid(), f, i);
if (f && (i == 1))
break;
}
getchar();
}
disegnare un albero di processi. –