fork
return -1 en error, y 0 o positivo else, por lo que la línea if (pid < 0) break;
dice "si hubo error, salga del ciclo".
Suponiendo que no hay error, es algo así como:
Al principio, i=0
, y usted tiene un solo proceso. llamémoslo p0
.
En la línea fork();
, p0
crea otro proceso. llamémoslo p1
.
En todos ellos, tenemos i++
(entonces ahora i
es 1), y estamos iterando nuevamente en el ciclo.
p0
y p1
, por separado, tienen un comando fork();
, por lo que cada uno de ellos crea otro proceso. llamemos a los nuevos procesos p2
y p3
.
Ahora, en cada proceso, tenemos i++
, que establece i
en 2, y ejecutamos el ciclo nuevamente.
Cada uno de los 4 procesos que tenemos, ejecuta la línea fork();
, y crea un nuevo proceso. así que ahora también tenemos p4
, p5
, p6
, p7
.
Cada proceso aumenta su i
a 3, y luego, como la condición de bucle ahora es falsa, el ciclo finalmente termina.
Ahora, el proceso 8 llega (por separado) a la línea siguiente.
(De hecho, cada iteración el doble del número de procesos, por lo que si cambiar el 3
a, por ejemplo, 15
, tendrá 2^15 procesos al final.)
si esto es #homework, por favor, márquelo como tal –
La función se llama "horquilla", no "horquilla"; He corregido el título. –