Título: Duda sobre procesos Publicado por: michelmarques en 1 Diciembre 2012, 19:00 pm 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! Título: Re: Duda sobre procesos Publicado por: naderST en 1 Diciembre 2012, 20:04 pm 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). Título: Re: Duda sobre procesos Publicado por: michelmarques en 1 Diciembre 2012, 20:29 pm 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) Título: Re: Duda sobre procesos Publicado por: naderST en 1 Diciembre 2012, 21:16 pm 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
|