CODIGO DEL PROGRAMA
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main (int arge, char * argv[])
{
int num;
pid_t pid;
for(num=0; num < 3; num++)
{
pid = fork();
printf("Soy el proceso pid %d y mi padre tiene %d de pid \n",
getpid(), getppid());
if (pid != 0)
{
break;
srandom(getpid());
sleep (random() %3);
}
}
if (pid != 0)
{
printf("Fin del proceso pid %d \n", wait (NULL));
return 0;
}
}
RESULTADO DEL PROGRAMA COMPILADO Y EJECUTADO EN UNA TERMINAL DE LINUX
EXPLICACION
1.- ¿POR QUE APARECEN MENSAJES REPETIDOS?
POR EL CICLO QUE EL MULTIPLICA
POR EL CICLO QUE EL MULTIPLICA
2.- ¿QUE OBSERVAS?
se crea un proceso hijo que imprime en pantalla el pid de su proceso padre, mientras que el proceso padre imprime en pantalla su propio pid y el del proceso hijo que ha creado. Para ello, se utilizan las llamadas al sistema getpid() y getppid(). El proceso padre, antes de finalizar se suspende hasta que el hijo acaba, para evitar que éste se quede zombie. Para ello, utiliza la llamada al sistema wait(), que recibe en la variable status el estado en que el proceso hijo finalizó.
3.- ¿POR QUE?
wait()
sintaxis
int pid wait (int*status)
archivo de cabecera
#include<sys/types.h>
#include<sys/wait.h>
El proceso que realiza quedara en espra de que cualquiera de sus hijos finalice
La orden devolvera cuando finalice uno de los hijos de proceso que ejecute el wait() el PID del hijo que ha finalizado
La orden toma como parametro un entero que contendra al finalizar la orden el codigo de finalizaicon del hijo que ha terminado
fork()
crea un nuevo proceso exactamente igual (mismo código) al proceso que invoca la función. Ambos procesos continúan su ejecución tras la llamada fork(). En caso de error, la función devuelve el valor -1 y no se crea el proceso hijo. Si no hubo ningún error, el proceso padre (que realizó la llamada) recibe como resultado el pid del proceso hijo que acaba de nacer, y el proceso hijo recibe el valor 0.
Publicado por Maria Isabel Serrano Medina 1701
REVISADO
ResponderEliminar