pkill
está fazendo exatamente o que você mandou: matou os processos cujo pai é 100. Não processa o pai de um pai / mãe com 100.
Nem o pkill
do Linux nem o do FreeBSD tem uma opção para percorrer a árvore de processos. Você pode chamar pstree -l
e analisar sua saída.
Tenha em mente que se A forks B, B forks C e B morrer, não haverá mais relação pai-filho que possa conectar A e C.
Pode haver uma maneira de eliminar todos esses processos, mas tenha cuidado com isso.
Se você passar um ID de processo negativo para kill
, isso elimina todo o grupo de processos . Isso é atômico, então funciona mesmo se um dos processos forquear, assim como você está executando kill
. Isso só mata os processos que não se colocaram em seu próprio grupo e também mata o processo pai e outros se eles estiverem no mesmo grupo de processos. Execute ps -o pgid …
para ver o ID do grupo de processos.
Se todos os processos que você quer matar tiverem um arquivo em particular aberto, você pode usar fuser -k /some/file
para matar todos os processos que possuem este arquivo aberto.
Outra opção no Linux é executar os processos em suas próprio namespace PID . Você pode então matar todo o espaço de nomes matando o pseudo-PGID -1 de dentro do namespace.