Un moyen facile d’abandonner les enfants sur exec

Existe-t-il un moyen simple et standard d’abandonner tous les enfants avant d’ exec une nouvelle image de processus? Semblable à la configuration d’un descripteur de fichier pour fermer sur exec, il serait bien de faire en sorte que tous vos enfants soient adoptés par init. Vous pouvez ignorer SIGCHLD qui (sur certaines plates-formes) donnerait une solution partielle au problème soulevé ici , mais qui n’est certainement pas portable. Je ne vois pas vraiment de cas d’utilisation de ce comportement, mais je suis curieux de savoir s’il existe un mécanisme standard.

C’est une question très intéressante.

Alors que les gestionnaires de signaux eux-mêmes sont remis à des valeurs par défaut intelligentes lorsque vous exec (et je pense que les signaux en attente sont effacés), vous êtes toujours le même ID de processus (PID) dans la hiérarchie.

Cela signifie que les futurs signaux SIGCHLD vous parviendront à la sortie de ces enfants.

Une façon d’éviter cela consiste à, plutôt que d’exécuter, exécuter un switcheroo sournois. Par cela, je veux dire d’abord fork , puis le processus parent quitte simplement (donc les enfants actuels sont adoptés par init ).

Le processus enfant résultant du fork a un PID totalement différent et n’a donc qu’une relation de parenté avec les autres enfants à ce stade. Il peut exécuter votre nouveau programme et continuer, sachant qu’il est sans enfant.