fork
restituisce -1 in caso di errore e 0 o positivo, quindi la riga if (pid < 0) break;
indica "se si è verificato un errore, esci dal ciclo".
Supponendo che non v'è errore, è qualcosa di simile:
All'inizio, i=0
, e si dispone di un unico processo. chiamiamolo p0
.
Nella riga fork();
, p0
viene creato un altro processo. chiamiamolo p1
.
In ognuno di essi, abbiamo i++
(quindi ora i
è 1) e stiamo ripetendo di nuovo il ciclo.
p0
e p1
, separatamente, avere un comando fork();
, in modo che ognuno di essi crei un altro processo. chiamiamo i nuovi processi p2
e p3
.
Ora, in ogni processo, abbiamo i++
, che imposta i
su 2 e eseguiamo nuovamente il ciclo.
Ognuno dei 4 processi che abbiamo, esegue la linea fork();
e crea un nuovo processo. così ora abbiamo anche p4
, p5
, p6
, p7
.
Ogni processo aumenta il suo i
a 3 e quindi, poiché la condizione del ciclo è ora falsa, il ciclo termina.
Ora, il processo 8 arriva (separatamente) alla riga successiva.
(Infatti, ogni iterazione il doppio del numero di processi, quindi se cambiare il 3
, ad esempio, 15
, si avrà 2^15 processi alla fine.)
se questo è #homework, contrassegnarlo come tale –
La funzione si chiama "fork", non "fork"; Ho corretto il titolo. –