Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: michelmarques en 1 Diciembre 2012, 19:00 PM

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