it-swarm-pt.tech

Como matar o processo zumbi

Eu lancei meu programa em primeiro plano (um programa daemon), e depois o matei com kill -9, mas recebi um zumbi restante e não consigo matá-lo com kill -9. Como matar um processo zumbi?

Se o zumbi é um processo morto (já morto), como eu o removo da saída de ps aux?

[email protected]:~# anyprogramd &
[email protected]:~# ps aux | grep anyprogram
 1163 root      2552 S    anyprogramd
 1167 root      2552 S    anyprogramd
 1169 root      2552 S    anyprogramd
 1170 root      2552 S    anyprogramd
10101 root       944 S    grep anyprogram
[email protected]:~# pidof anyprogramd
1170 1169 1167 1163
[email protected]:~# kill -9 1170 1169 1167 1163
[email protected]:~# ps aux |grep anyprogram
 1163 root         0 Z    [cwmpd]
[email protected]:~# kill -9 1163
[email protected]:~# ps aux |grep anyprogram
 1163 root         0 Z    [cwmpd]
157
MOHAMED

Um zumbi já está morto, então você não pode matá-lo. Para limpar um zumbi, ele deve ser esperado por seu pai, então matar o pai deve trabalhar para eliminar o zumbi. (Depois que o pai morre, o zumbi será herdado pelo pid 1, que o aguardará e limpará sua entrada na tabela de processos.) Se o seu daemon está gerando filhos que se tornam zumbis, você tem um bug. Seu daemon deve notar quando seus filhos morrem e wait neles para determinar seu status de saída.

Um exemplo de como você pode enviar um sinal para cada processo que é o pai de um zumbi (note que isso é extremamente cru e pode matar processos que você não pretende. Eu não recomendo usar esse tipo de marreta):

kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
217
William Pursell

Você pode limpar um processo zumbi matando seu processo pai com o seguinte comando:

kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')
65
krishna murti

Eu tentei:

ps aux | grep -w Z   # returns the zombies pid
ps o ppid {returned pid from previous command}   # returns the parent
kill -1 {the parent id from previous command}

isso vai funcionar :)

31
Mohammad Rafiee

Encontrado em http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/

2) Aqui uma ótima dica de outro usuário (Thxs Bill Dandreta): Às vezes

kill -9 <pid>

não vai matar um processo. Corre

ps -xal

o quarto campo é o processo pai, mata todos os pais de um zumbi e o zumbi morre!

Exemplo

4 0 18581 31706 17 0 2664 1236 wait S ? 0:00 sh -c /usr/bin/gcc -fomit-frame-pointer -O -mfpmat
4 0 18582 18581 17 0 2064 828 wait S ? 0:00 /usr/i686-pc-linux-gnu/gcc-bin/3.3.6/gcc -fomit-fr
4 0 18583 18582 21 0 6684 3100 - R ? 0:00 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1 -quie

18581, 18582, 18583 são zumbis -

kill -9 18581 18582 18583

não tem efeito.

kill -9 31706

remove os zumbis.

23
Sergio

Eu tentei

kill -9 $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')

e funciona para mim.

19
Jeoffrey