Pregunta sobre pid_t fork(); y el hijo creado.

Iniciado por Tha_Traker, 29 Abril 2010, 16:12 PM

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

Tha_Traker

Hola todo el mundo, hace siglos que no me pasaba por aquí. En todo caso a sido en el primer foro que he pensado :D.

Bueno os cuento, mi duda es: si yo creo un hijo en linux con pid_t fork(); y este es creado dentro de un bucle, el también ejecutara el bucle o saldra de él??. La duda viene a raiz de que yo quiero que salga directamente o se me fastidia el invento :D.

Os copio el código que sera más comprensible supongo.
Citar
//DATOS ADICIONALES
N_MAX=15
numero es cada cuanto se genera un hijo
tiempo_max es lo que duerme el hijo

      while(i<10)
      {
         
         srand(time(0));
         //Generamos un numero no mayor que N_MAX
         //Le sumamos 1 para que empiece en 1.

         numero=1+rand()%(N_MAX);
         //Generamos el tiempo de espera de cada hijo.
         //Crea números en un intervalo de 5 a 30.

         tiempo_max=5+rand()%21;
      //Tiempo de espera para crear el siguiente hijo.
         sleep(numero);
         //CREAR HIJO
         pid_t fork(); <-Creo el hijo, va a salir o va a comprobar el while?????
         
      }
      pid_h=getpid();
      if(pid_h==0)      //Solo si es hijo.
      {
         sleep(tiempo_max);
         printf("\n\t Simulador: Lanzando programa- Tiempo ejecución %d ",tiempo_max);
                       exit(0);
      }
      //El padre espera a que todos los hijos mueran.
      wait();



Cualquier cosa que se os ocurra sera de gran ayuda.

Un saludo

darkraider

El fork hace lo siguiente:
- Cambia modo de operación (de usuario a Kernel)
- Crea un mapa de memoria para un nuevo proceso
- Copia exactamente igual todas las variables, heap y stack del proceso original (incluso el contador de programa).
- Devuelve 0 al proceso hijo y el identificador de proceso del hijo al padre.

Luego tu programa después de llamar al fork va a seguir dentro del while y va a evaluar la condicion.
Salu2
Curioso de mi...

Tha_Traker

Mil gracias darkraider, entonces tendre que hacer un par de cambios.

Un saludo