¿Es posible que el proceso principal se cuelgue en el paso de “espera” si el proceso secundario se convierte en un ZOMBIE o CRASHES?

He usado pipe / fork, etc para ejecutar un subproceso en C y está funcionando al 100%.

Esencialmente tengo el siguiente paso de ESPERA en el código de los padres:

wait(&rv); //where rv is just an int of zero 

Mi pregunta es: ¿es posible que el padre espere “de forma indefinida” o que HANG se coloque si el niño se bloquea por una falla de segmentación o se convierte en un zombie?

Dicho de otra manera, si el código secundario no tiene “bucles infinitos”, etc. … ¿es posible que el proceso principal se “cuelgue” para siempre del paso de espera?

¿Cuál es el enfoque más seguro aquí para evitar el manejo? He visto un WNOHANG … ¿debería estar usando eso? ¿Pero debo esperar a que finalice el subproceso antes de continuar?

 waitpid(-1, &status, WNOHANG) 

Además, ¿es una buena práctica usar un controlador SIGCHLD?

Gracias por la ayuda

Lynton

Si hay un proceso hijo zombie (ya sea por falla de segmentación o salida normal), la espera devolverá su estado de salida. Si no hay niños zombis, la espera se bloqueará si hay al menos un niño corriendo, pero no se bloqueará si no hay niños. En este último caso, devolverá -1 y establecerá errno = ECHILD .

Es posible que desee utilizar waitpid si desea esperar a un niño específico, pero parece que no necesita WNOHANG .

Un controlador SIGCHLD podría ser útil para indicar que una llamada a wait no se bloqueará, pero de lo contrario no es necesario. Si no quiere preocuparse por si sus hijos están corriendo o no, puede configurar SIGCHLD en SIG_IGN . Entonces no se generarán zombies.