Como posso matar apenas um processo pai?

9

Eu tenho os seguintes processos.

ParentProcess
-- ChildProcess
-- ChildProcess
-- ChildProcess

Como posso matar apenas o processo pai? Eu quero que os processos das crianças não sejam mortos. Se eu tentar matar o processo pai, as crianças terão SIGHUP e serão mortas.

    
por kcm1700 07.03.2013 / 17:27

1 resposta

8

Em geral, quando um processo se torna órfão (isto é, seu pai morre) ele é adotado pelo init.

A situação especial que você descreve provavelmente se aplica a um processo interativo quando seu terminal de controle é fechado (de Wikipedia ):

The SIGHUP signal is sent to a process when its controlling terminal is closed. It was originally designed to notify the process of a serial line drop. In modern systems, this signal usually means that controlling pseudo or virtual terminal has been closed.

Para evitar isso, os processos filhos devem bloquear o SIGHUP, portanto, na maioria dos casos, você precisa da cooperação do processo pai.

Se o processo pai for um shell ( bash , csh e semelhantes) e você desejar que os comandos executados não terminem quando o bash terminar, você poderá prefixar qualquer comando com nohup (de info coreutils "nohup invocation" ) :

'nohup' runs the given COMMAND with hangup signals ignored, so that the command can continue running in the background after you log out.

Neste exemplo:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

find não será eliminado quando o shell terminar e fechar o terminal de controle /dev/ttys000 .

Se um script de shell deve bloquear SIGHUP, use o arquivo trap , conforme explicado aqui para bash .

    
por 07.03.2013 / 18:09