Eu tenho os seguintes processos.
ParentProcess - ChildProcess - ChildProcess - ChildProcess
Como posso matar apenas o processo pai? Quero que os processos filhos não sejam mortos. Se eu tentar matar o processo pai, os filhos receberão SIGHUP e serão mortos.
Respostas:
De um modo geral, quando um processo se torna órfão (ou seja, seu pai morre), ele é adotado pelo init.
A situação especial que você descreve provavelmente se aplica a um processo interativo quando o terminal de controle é fechado (da Wikipedia ):
Para evitar isso, os processos filhos devem bloquear o SIGHUP, portanto, na maioria dos casos, você precisa de cooperação do processo pai.
Se o processo pai é um shell (
bash
,csh
e similares) e você quer comandos que você executa não terminar quando acabamentos festança, você pode prefixar qualquer comando comnohup
(a partir deinfo coreutils "nohup invocation"
):Neste exemplo:
find
não será morto quando o shell terminar e fechar o terminal de controle/dev/ttys000
.Se um script de shell bloquear o SIGHUP, use o builtin
trap
, conforme explicado aqui parabash
.fonte