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 parent
processo. 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?
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:
Em python, eu sugeriria usar a biblioteca psutil , especialmente o
Process.children
método.fonte