L'enfant peut demander au noyau de livrer SIGHUP
(ou autre signal) lorsque le parent décède en spécifiant l'option PR_SET_PDEATHSIG
en prctl()
appel système comme ceci :
prctl(PR_SET_PDEATHSIG, SIGHUP);
Voir man 2 prctl
pour plus de détails.
Edit :Ceci est uniquement Linux
J'y suis parvenu par le passé en exécutant le code "original" dans "l'enfant" et le code "généré" dans le "parent" (c'est-à-dire :vous inversez le sens habituel du test après fork()
). Piégez ensuite SIGCHLD dans le code "spawned"...
Peut-être pas possible dans votre cas, mais mignon quand ça marche.
J'essaie de résoudre le même problème, et comme mon programme doit fonctionner sous OS X, la solution Linux uniquement n'a pas fonctionné pour moi.
Je suis arrivé à la même conclusion que les autres personnes sur cette page - il n'existe pas de moyen compatible POSIX d'informer un enfant du décès d'un parent. J'ai donc trouvé la meilleure chose à faire :le sondage auprès des enfants.
Lorsqu'un processus parent meurt (pour une raison quelconque), le processus parent de l'enfant devient le processus 1. Si l'enfant interroge simplement périodiquement, il peut vérifier si son parent est 1. Si c'est le cas, l'enfant doit se fermer.
Ce n'est pas génial, mais ça marche, et c'est plus facile que les solutions d'interrogation de socket/lockfile TCP suggérées ailleurs sur cette page.