Como posso matar apenas um processo pai?

10

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.

kcm1700
fonte
5
É a definição de um processo filho ao qual está vinculado ao pai?
quer
hum, provavelmente sim. Está ligado ao seu pai.
precisa saber é o seguinte

Respostas:

8

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 ):

O sinal SIGHUP é enviado para um processo quando seu terminal de controle é fechado. Foi originalmente projetado para notificar o processo de queda de linha serial. Nos sistemas modernos, esse sinal geralmente significa que o controle de pseudo ou terminal virtual foi fechado.

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, cshe similares) e você quer comandos que você executa não terminar quando acabamentos festança, você pode prefixar qualquer comando com nohup(a partir de info coreutils "nohup invocation"):

'nohup' executa o COMMAND fornecido com os sinais de interrupção ignorados, para que o comando possa continuar em execução em segundo plano depois que você sair.

Neste exemplo:

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

findnã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 para bash.

jaume
fonte
11
Já abri o processo sem nohup, alguma sugestão?
precisa saber é o seguinte
Tanto quanto eu sei, você não pode fazer muito. Depois que os processos são executados, você não pode mudar a maneira como eles reagem aos sinais.
jaume
11
Como faço para colocar um processo já em execução nohup? stackoverflow.com/questions/625409/...
PeterVermont