¿Por qué WIFEXITED devuelve True en el proceso en ejecución?
-
10-07-2019 - |
Pregunta
Cuando espero en un grupo de proceso en ejecución específico que es un proceso secundario, ¿WIFEXITED devuelve verdadero diciendo que el proceso salió? ¿Es así como funciona? Parece que hay algo que no entiendo ...
if ( waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG ) == -1)
perror("Wait error");
if ( WIFEXITED(pstatus) ) {
strncpy(buf, "Exited", buf_size);
return 0;
Solución
Como especificó WNOHANG
creo que waitpid
está devolviendo 0
y pstatus
tiene el valor que tenía antes, así que WIFEXITED
no funciona con datos actualizados.
si se especificó
WNOHANG
y uno o más hijos especificado porpid
existe, pero aún no ha cambiado de estado, entonces se devuelve0
.
Otros consejos
waitpid
devuelve el pid hijo cosechado si cosecha con éxito un hijo. Cuando se usa con WNOHANG
, devuelve inmediatamente 0 si ningún niño ha salido. Por lo tanto, debe verificar si el valor de retorno es 0 o un pid antes de inspeccionar status
. Vea aquí para más detalles:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/ waitpid.html