J'ai les processus suivants.
ParentProcess - ChildProcess - ChildProcess - ChildProcess
Comment puis-je tuer uniquement le processus parent? Je veux que les processus des enfants ne soient pas tués. Si j'essaie de tuer le processus parent, les enfants auront SIGHUP et seront tués.
Réponses:
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 ):
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 avecnohup
(frominfo coreutils "nohup invocation"
):Dans cet exemple:
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 pourbash
.la source