Duda sobre procesos

Iniciado por michelmarques, 1 Diciembre 2012, 19:00 PM

0 Miembros y 1 Visitante están viendo este tema.

michelmarques

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!

naderST

#1
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).

michelmarques

#2
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


naderST

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