Comment tuer processus zombie [fermé]

j'ai lancé mon programme au premier plan (un programme démon), et puis je l'ai tué avec kill -9 , mais je reçois un zombie restant et je ne suis pas en mesure de le tuer avec kill -9 . Comment tuer un zombie?

si le zombie est un processus mort (déjà tué), comment je le supprime de la sortie de 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]
134
demandé sur octosquidopus 2013-06-05 20:14:46

5 réponses

Un zombie est déjà mort, donc vous ne pouvez pas le tuer. Pour nettoyer un zombie, il doit être attendu par ses parents, afin de tuer les parents doivent s'efforcer d'éliminer les zombies. (Après le parent meurt , le zombie sera hérité par init , qui attend sur elle et effacer son entrée dans la table de processus.) Si votre démon est le frai d'enfants qui deviennent zombies, vous avez un bug. Votre démon devrait remarquer quand ses enfants meurent et wait sur eux pour déterminer leur statut de sortie.

un exemple de la façon dont vous pourriez envoyer un signal à chaque processus qui est le parent d'un zombie (notez que c'est extrêmement grossier et pourrait tuer les processus que vous n'avez pas l'intention. Je ne recommande pas l'utilisation de cette sorte de marteau):

kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[]++ {print }')
193
répondu William Pursell 2018-02-05 23:23:11

vous pouvez nettoyer un processus zombie en tuant son processus parent avec la commande suivante:

kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print  }')
60
répondu krishna murti 2015-06-02 21:46:33

j'ai essayé:

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}

cela va fonctionner :)

29
répondu Mohammad Rafiee 2014-04-14 12:51:44

trouvé à http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/

2) Voici un bon conseil d'un autre utilisateur (Thxs Bill Dandreta): Parfois

kill -9 <pid>

ne tuera pas un processus. Run

ps -xal

le quatrième champ est le processus parent, tuer tous les parents d'un zombie et le zombie meurt!

exemple

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 sont des zombies -

kill -9 18581 18582 18583

n'a pas d'effet.

kill -9 31706

élimine les zombies.

18
répondu Sergio 2015-01-11 16:24:13

j'ai essayé

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

et ça marche pour moi.

16
répondu Jeoffrey 2014-11-03 18:04:17