Como os processos podem se desconectar quando tento matá-los?


0

Eu tenho um aplicativo no Linux onde tenho que matar uma árvore de processo inteira de dentro de um aplicativo. A árvore do processo é semelhante a:

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

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

Respostas:


1

Matar de forma confiável uma árvore de processos não é uma questão simples, existem algumas dicas, como:

  • matar um pai normalmente não mata seus filhos
  • a morte 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 obter minhas respostas a estas perguntas e respostas mais ou menos relacionadas para obter detalhes:


Obrigado pelas indicações. Isso me fez conhecer alguns fatos e dicas importantes.
27415 Stefan #

1

Geralmente em sistemas POSIX, não é verdade que o processo pai de matar também mata seu filho.

Especialmente se você usar kill -KILL, depois de matar o processo pai, o processo filho se tornou um processo órfão .

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

ps --ppid <parent_pid>

Em python, eu sugeriria usar a biblioteca psutil , especialmente o Process.childrenmétodo.


11
Veja também as respostas a esta pergunta.
running.t
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.