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;
¿Fue útil?

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 por pid existe, pero aún no ha cambiado de estado,   entonces se devuelve 0 .

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top