El niño puede pedirle al kernel que entregue SIGHUP
(u otra señal) cuando el padre muere especificando la opción PR_SET_PDEATHSIG
en prctl()
llamada al sistema como esta:
prctl(PR_SET_PDEATHSIG, SIGHUP);
Ver man 2 prctl
para más detalles.
Editar:Esto es solo para Linux
He logrado esto en el pasado ejecutando el código "original" en el "hijo" y el código "generado" en el "padre" (es decir:inviertes el sentido habitual de la prueba después de fork()
). Luego atrapa SIGCHLD en el código "generado"...
Puede que no sea posible en tu caso, pero lindo cuando funciona.
Estoy tratando de resolver el mismo problema, y dado que mi programa debe ejecutarse en OS X, la solución solo para Linux no funcionó para mí.
Llegué a la misma conclusión que las otras personas en esta página:no hay una forma compatible con POSIX de notificar a un niño cuando muere un padre. Así que hice la siguiente mejor cosa:tener la encuesta infantil.
Cuando un proceso padre muere (por cualquier motivo), el proceso padre del hijo se convierte en el proceso 1. Si el hijo simplemente sondea periódicamente, puede verificar si su padre es 1. Si es así, el hijo debe salir.
Esto no es muy bueno, pero funciona, y es más fácil que las soluciones de sondeo TCP socket/lockfile sugeridas en otras partes de esta página.