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?

Stefan
fonte

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:

Dan Cornilescu
fonte
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.

running.t
fonte
11
Veja também as respostas a esta pergunta.
running.t