Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema trasteando con fork()

Estas en el tema de Problema trasteando con fork() en el foro de C/C++ en Foros del Web. Buenas! estoy probando a hacer fork() con un programa muy tonto, de los que suelen hacerse cuando lo único que quieres hacer es probar... y ...
  #1 (permalink)  
Antiguo 17/04/2011, 11:37
 
Fecha de Ingreso: marzo-2011
Mensajes: 23
Antigüedad: 13 años, 1 mes
Puntos: 0
Busqueda Problema trasteando con fork()

Buenas! estoy probando a hacer fork() con un programa muy tonto, de los que suelen hacerse cuando lo único que quieres hacer es probar... y todo iba muy bien hasta que he visto que al hacer exit(1); en el proceso hijo, en el monitor del sistema el proceso se quedaba como "zombie" hasta que el proceso padre también moría.

El caso es que buscando he visto que esto ocurre cuando el proceso padre no recoge el código de salida del hijo, así que he encontrado un if(WIFEXITED(estadoHijo) != 0) para saber si el hijo ha salido correctamente.

El caso es que lo implemento en mi código y por más vueltas que le doy no comprendo el siguiente error:

fork_wait.c:(.text+0x127): undefined reference to `WEXITSTAUS'


Os dejo aquí abajo el código completo del programilla:

#include <stdio.h>
#include <string.h>
#include <wait.h>
#include <stdlib.h>



int main()
{
int estadoHijo;

printf("PADRE: Me presento, soy el padre, mi Pid es %d\n", getpid());
sleep(1);
printf("PADRE: Voy a lanzar a mi hijo\n");
sleep(10);

switch(fork())
{
case -1:
printf("ERROR: No se ha podido lanzar al hijo, cerrando");
exit(-1);
break;
case 0:
printf("HIJO: Me presento, soy el hijo, mi Pid es %d, y el de mi padre %d\n", getpid(), getppid());
sleep(5);
printf("HIJO: He podido lanzarme correctamente y ejecuto el codigo correspondiente al case 0 del switch, porque para mi, el fork devuelve valor 0\n");
sleep(5);
printf("HIJO: Aqui me despido, os dejo con mi padre\n");
exit(1);
break;
default:
printf("PADRE: Soy el padre, estoy ejecutandome concurrentemente con mi hijo, de manera que deberia decir esto a la vez que el se presenta, luego espero a que termine para evaluar el resultado\n");
wait(&estadoHijo);
}


if ( WIFEXITED(estadoHijo) != 0)
{
printf ("Mi hijo ha hecho exit (%d)\n", WEXITSTAUS(estadoHijo));
}
else
printf ("A mi hijo lo han MATADO\n");



sleep(5);
printf("PADRE: Soy el padre desde fuera del switch, deberia decir esto antes de acabar el programa\n");
sleep(5);
}

Última edición por superx335; 17/04/2011 a las 12:02

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:02.