Como os processos podem ser desanexados quando tento matá-los?

0

Eu tenho uma aplicação no Linux onde eu tenho que matar uma árvore de processo inteira de dentro de uma aplicação. A árvore do processo se parece com:

app
└── parent
    ├── child1
    ├── child2
    ├── child3
    ├── child4
    └── child5

Agora eu tenho problemas ao matar a árvore de processos matando parent : muitas vezes acontece que vários subprocessos não estão sendo mortos quando eu tento matar o processo parent . Após o sinal kill, os processos filhos aparecem "desanexados", já que eles estão na árvore de processos e não estão abaixo do aplicativo original app . Como isso pode acontecer?

    
por Stefan 22.10.2015 / 16:45

2 respostas

1

Matar com segurança uma árvore de processos não é uma questão simples, existem algumas dicas, como:

  • matar um pai normalmente não mata seus filhos
  • matar por grupo de processos geralmente falha se o processo assassino estiver no mesmo grupo de processos porque o assassino também é morto, normalmente antes de terminar seu trabalho
  • identificar todos os descendentes de um processo não é trivial

Você pode querer passar por minhas respostas para esses detalhes mais ou menos relacionados.

por 23.10.2015 / 07:16
1

Geralmente, em sistemas POSIX, não é verdade que o processo pai matador também o mata.

Especialmente se você usa kill -KILL , depois de matar o processo filho do processo pai tornou-se processos órfãos .

Você pode matar todo o grupo de processos ou pesquisar os processos pelo pai pid antes de matar os pais. No shell, isso pode ser feito usando:

ps --ppid <parent_pid>

Em python, sugiro usar a biblioteca psutil , especialmente Process.children .

    
por 22.10.2015 / 18:32