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]
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}')
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 }')
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:)
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.
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.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