Cool C/C++

Programacion en C/C++

Home Foros
Bienvenido, Invitado
Por favor Identificarse o Registrarse.    Contraseña olvidada?

Problema trasteando con fork()
(1 viendo) (1) Invitado
AbajoPágina: 12
TEMA: Problema trasteando con fork()
#30
Problema trasteando con fork() Creado el día: 17/04/2011 07:18 Karma: 0
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);
}
superx335
Navegador Iniciado
Mensajes: 5
graphgraph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
 
#31
Re: Problema trasteando con fork() Creado el día: 17/04/2011 21:08 Karma: 2
Prueba agregando la siguiente línea luego de la sección include:

#define _GNU_SOURCE
adrianvaca
Administrador
Mensajes: 110
graph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
El conocimiento es una forma de empezar a ser libre
 
#32
Re: Problema trasteando con fork() Creado el día: 19/04/2011 06:24 Karma: 0
Nada, sigue apareciendo el mismo error :/

Gracias por la respuesta, alguna idea más? Un saludo!
superx335
Navegador Iniciado
Mensajes: 5
graphgraph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
 
#33
Re: Problema trasteando con fork() Creado el día: 19/04/2011 10:12 Karma: 2
Qué compilador y sistema operativo estás usando?
adrianvaca
Administrador
Mensajes: 110
graph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
El conocimiento es una forma de empezar a ser libre
 
#34
Re: Problema trasteando con fork() Creado el día: 19/04/2011 14:40 Karma: 0
Estoy usando gcc en Linux Ubuntu 10.10, ya que en Windows vi que no podía hacer funcionar tan fácilmente POSIX.

Gracias
superx335
Navegador Iniciado
Mensajes: 5
graphgraph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
 
#35
Re: Problema trasteando con fork() Creado el día: 20/04/2011 11:19 Karma: 0
El problema es que estas escribiendo mal la macro WEXITSTAUS deberia ser: WEXITSTATUS por eso te marca ese error:

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

por que no encuentra la declaracion de esa macro con ese nombre en ninguna de las librerias declaradas.
ajo
Navegador Iniciado
Mensajes: 8
graphgraph
Usuario Offline Presiona aquí para ver el perfil de este usuario
El administrador ha deshabilitado la escritura pública.
 
ArribaPágina: 12
obtén los últimos mensajes directamente en tu escritorio