Pasos:
Fork and start process en un grupo de programas diferente
Detener proceso con SIGTSTP
Reiniciar proceso con SIGCONT
Termina el proceso
Problema: el controlador SIGCHLD tiene:
waitpid(-1, &status, WNOHANG | WUNTRACED); al regresar pid = 0 y WIFEXITED = 1, entonces, el proceso finalizó, pero no puedo obtener el pid. Necesito el pid.
De la página del manual: "si se especificó WNOHANG y existen uno o más hijos especificados por pid, pero aún no han cambiado de estado, entonces se devuelve 0"
Pero parece que el estado ha cambiado a salido.
El estado no tiene sentido si el pid devuelto fue 0. Piénsalo. Un retorno de 0 significa que tiene uno o más hijos que aún tienen que cambiar de estado. ¿Cuál sería el estado de un niño que aún no ha cambiado de estado? Si hubiera varios hijos, ¿a qué hijo hace referencia el código de estado?
Esto es similar a verificar errno en una llamada exitosa. Cualquier cosa de una llamada anterior puede estar en errno pero no tiene nada que ver con la llamada exitosa más reciente porque errno generalmente no se establece en éxito.
El valor de retorno de waitpid es el PID del hijo que se esperaba.