GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire mourir le processus enfant après la sortie du parent?

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.


Linux
  1. Comment tuer un processus dont le parent est Init ?

  2. Linux – Comment rendre un processus invisible pour les autres utilisateurs ?

  3. Fonctionnement du cycle de vie des processus Linux - processus parent, enfant et init

  4. Comment trouver tous les processus enfants ?

  5. Comment définir le répertoire de travail du processus parent ?

Comment afficher les PPID sous Linux

Comment tuer le processus zombie

Comment obtenir un processus enfant à partir d'un processus parent

Comment forker un processus qui ne meurt pas à la sortie du shell ?

Comment la copie sur écriture dans fork() gère-t-elle plusieurs fourches ?

Comment tuer un processus <defunct> avec le parent 1