Si su proceso principal tiene una PID A y B - F son subprocesos PID, entonces:
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
Dónde i
es el valor de i
de la (sub) proceso de contexto. Desde fork
crea una copia exacta del proceso en ejecución, la variable i
también se copiarán. Cuando A genera B, i
es 0. Cuando A genera C, i
es 1. El proceso A ahora sale del for-loop ya que i == 1.
Ahora, el subproceso C comienza a ejecutarse, con i
== 1. Tenga en cuenta que no se romperá dentro del for-loop ya que fork(), en C punto de desove, devuelve 0. En su lugar, se repetirá, aumentando i
a 2, engendrando D, y saldrá debido a la condición for-loop.
El subproceso B tienen i
== 0, cuando se inicia. Genera el subproceso E y se rompe dentro del for-loop. (I == 1)
Y así sucesivamente ...
Cuando está tyring para averiguar de cosas como estas, te puedo dar un consejo:
Hacer variables intermedias e imprimirlas.
he modificado su código, para que se imprima un vistazo a las cosas que acabo de describir:
#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();
}
dibujar un árbol de procesos. –