Jak zabić proces zombie [zamknięty]

Uruchomiłem mój program na pierwszym planie( program demona), a potem zabiłem go kill -9, ale zostaje mi zombie i nie jestem w stanie go zabić kill -9. Jak zabić proces zombie?

Jeśli zombie jest martwym procesem( już zabitym), jak go usunąć z wyjścia ps aux?

root@OpenWrt:~# anyprogramd &
root@OpenWrt:~# 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
root@OpenWrt:~# pidof anyprogramd
1170 1169 1167 1163
root@OpenWrt:~# kill -9 1170 1169 1167 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [cwmpd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [cwmpd]
Author: octosquidopus, 2013-06-05

5 answers

Zombie już nie żyje, więc nie można go zabić. Aby oczyścić zombie, musi on czekać na jego rodzica, więc zabicie rodzica powinno działać, aby wyeliminować zombie. (Po śmierci rodzica zombie zostanie odziedziczony przez init, który będzie czekać na niego i wyczyścić jego wpis w tabeli procesów.) Jeśli twój Demon rodzi dzieci, które stają się zombie, masz błąd. Twój Demon powinien zauważyć, kiedy jego dzieci umierają i wait na nich, aby określić ich status wyjścia.

Przykład w jaki sposób możesz wysłać sygnał do każdego procesu, który jest rodzicem zombie (zauważ, że jest to bardzo prymitywne i może zabić procesy, których nie zamierzasz. Nie polecam używania tego typu młotka):

kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
 193
Author: William Pursell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-05 23:23:11

Możesz oczyścić proces zombie, zabijając jego proces macierzysty za pomocą następującego polecenia:

kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')
 60
Author: krishna murti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-02 21:46:33

Próbowałem:

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}

To zadziała:)

 29
Author: Mohammad Rafiee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-14 12:51:44

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

2) tutaj świetna wskazówka od innego użytkownika (Thxs Bill Dandreta): Czasami

kill -9 <pid>

Nie zabije procesu. Run

ps -xal

Czwarte pole to proces rodzica, zabij wszystkich rodziców zombie, a zombie umrze!

Przykład

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 are zombies -

kill -9 18581 18582 18583

Nie ma efekt.

kill -9 31706

Usuwa Zombie.

 18
Author: Sergio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-11 16:24:13

Próbowałem

kill -9 $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')
I działa na mnie.
 16
Author: Jeoffrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-03 18:04:17