Hola buenas, quería consultaros cual sería el árbol de procesos resultante de su ejecución, y el orden en que se generarían los procesos. [Tengo la solución del árbol sacada pero no consigo entender el por qué, da ese resultado] Por tanto me ayudaría más una explicación del código "para dummies" que la resolución del mismo.
Citar#include <todas_las_cabeceras_necesarias.h>
int main(void){
pid_t pid;
int i;
for(i=0; i<4; i++;){
if(!fork()){
if ((i%2)==0)
fork();
exit(0);
}
wait(NULL);
}
return 0;
}
Muchas gracias!
Sabemos que fork() duplica el código del proceso padre y el proceso hijo resultante continúa su ejecución donde quedó el padre.
Ese código que nos muestras va a ir creando un proceso a la vez y el proceso padre va a esperar que este termine (función wait). En el caso de i = 0 e i = 2 se va a cumplir la condición de ((i%2)==0) y el proceso hijo 0 y 2 crearan un proceso hijo respectivamente, los cuales harán exit inmediatamente. (Ambos procesos quedarán zombies en la tabla de procesos, debido a que su padre no hizo wait).
En general, se van creando procesos secuencialmente y en los casos particulares de i=0 e i=2 los procesos hijos crearan otro proceso hijo (nieto del principal, por así decirlo).
Gracias por tu respuesta, pero despues de tu explicación aún me queda menos claro el resultado, que es el que adjunto. A ver si lo puedo llegar a entender.
Quizá con una traza lo consiga comprender, ... No sé :(
Un saludo
(http://thumbs.subefotos.com/8f7a8ba1c985225c54a755abfe1ad89ao.jpg) (http://subefotos.com/ver/?8f7a8ba1c985225c54a755abfe1ad89ao.jpg)
Qué no entiendes? Por qué no haces un ejemplo más sencillo y tratas de entenderlo? También debes tomar en cuenta que fork() una vez duplicado el código por el lado del proceso padre puede devolver -1 si falla o el PID del nuevo proceso hijo, ahora bien por el lado del hijo devuelve 0