De manière générale, lorsqu'un processus devient orphelin (c'est-à-dire que son parent décède), il est adopté par init.
La situation particulière que vous décrivez s'applique probablement à un processus interactif lorsque son terminal de contrôle se ferme (de Wikipedia ):
Le signal SIGHUP est envoyé à un processus lorsque son terminal de commande est fermé. Il a été initialement conçu pour notifier le processus de coupure de ligne série. Dans les systèmes modernes, ce signal signifie généralement que le contrôle du pseudo ou du terminal virtuel a été fermé.
Pour éviter cela, les processus enfants doivent bloquer SIGHUP, donc dans la plupart des cas, vous avez besoin de la coopération du processus parent.
Si le processus parent est un shell ( bash
, csh
et similaire) et que vous souhaitez que les commandes que vous exécutez ne se terminent pas à la fin de bash, vous pouvez préfixer n'importe quelle commande avec nohup
(from info coreutils "nohup invocation"
):
'nohup' exécute la commande donnée avec les signaux de raccrochage ignorés, afin que la commande puisse continuer à s'exécuter en arrière-plan après votre déconnexion.
Dans cet exemple:
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
ne sera pas tué lorsque le shell se terminera et fermera le terminal de contrôle /dev/ttys000
.
Si un script shell doit bloquer SIGHUP, utilisez la fonction interne trap
, comme cela est expliqué ici pour bash
.