Aparentemente, si se detiene un proceso en el grupo de procesos, todos los procesos se señalan con SIGHUP y luego con SIGCONT cuando finaliza el líder del grupo de procesos. El controlador predeterminado para SIGHUP finaliza el proceso. Es el comportamiento esperado, como se documenta en, p.
http://www.win.tue.nl/~aeb/linux/lk/lk-10.html
Desde el enlace de arriba:
Si la terminación de un proceso hace que un grupo proceso para convertirse en huérfano, y algún miembro se detuvo, y luego todos son envió primero SIGHUP y luego SIGCONT.
La idea es que quizás el padre de el líder del grupo de procesos es un trabajo shell de control. (En la misma sesión pero un grupo de procesos diferente). Como mientras este padre esté activo, puede manejar la detención y el inicio de los miembros en el grupo de procesos. Cuando muere, puede que no haya nadie para continuar procesos detenidos. Por lo tanto, estos procesos detenidos se envían SIGHUP, por lo que que mueren a menos que detecten o los ignoren, y luego SIGCONT continúe hasta .
EDIT:
Por cierto, strace es una herramienta maravillosa para llegar al fondo de este tipo de cosas. Si conecta strace a uno de los procesos hijos, verá que SIGHUP se entrega solo si uno de ellos se detiene cuando el padre (es decir, el líder del grupo de procesos) fallece.
Debe cambiar el controlador de SIGHUP utilizando, p. Ej. sigaction (2) si desea que los procesos de los niños sobrevivan.
Su código es una muy buena manera de hacer café muy caliente usando su CPU ... Especialmente si tiene 4 núcleos o más ... –
Sí, es :) Pero esto es solo para una prueba y cumple esto papel. – Ximik
Gran pregunta ... fascinado de ver la respuesta. Sospecho que los grupos de procesos están involucrados, pero no estoy seguro de cómo. –