pkill não mata processos após descendentes imediatos de um processo

pkill não mata processos após descendentes imediatos de um processo

Eu quero matar uma cadeia de processos, por exemplo

PID  PPID
100  XXX
101  100
102  101

Quando uso pkill -P 100o PID 100 e 101 morrem conforme o esperado, mas 102 recebe init como PPID.

Como posso forçar o pkill a continuar eliminando processos encadeados após os descendentes imediatos de um processo?

Responder1

pkillestá fazendo exatamente o que você disse para fazer: eliminou os processos cujo pai é 100. Não os processos cujo pai do pai é 100.

Nem o Linux pkillnem o FreeBSD têm a opção de percorrer a árvore de processos. Você pode chamar pstree -le analisar sua saída.

Tenha em mente que se A bifurca B, B bifurca C e então B morre, não resta nenhuma relação pai-filho que possa conectar A e C.

Pode haver uma maneira de eliminar todos esses processos, mas cuidado, pois isso pode ser excessivo.

Se você passar um ID de processo negativo para kill, isso matará todo ogrupo de processos. Isso é atômico, portanto funciona mesmo se um dos processos for bifurcado no momento em que você está executando o kill. Isso mata apenas os processos que não foram colocados em seu próprio grupo e também mata o processo pai e outros se estiverem no mesmo grupo de processos. Execute ps -o pgid …para ver o ID do grupo de processos.

Se todos os processos que você deseja eliminar tiverem um arquivo específico aberto, você poderá usar fuser -k /some/filepara matartodosos processos que possuem este arquivo aberto.

Outra opção no Linux éexecute os processos em seu próprio namespace PID. Você pode então eliminar todo o namespace eliminando o pseudo-PGID -1 de dentro do namespace.

informação relacionada