Ich habe mein Programm im Vordergrund gestartet (ein Daemon-Programm) und es dann mit getötet kill -9
, aber es bleibt ein Zombie übrig und ich kann es nicht mit töten kill -9
. Wie töte ich einen Zombie-Prozess?
Wenn der Zombie ein toter Prozess ist (bereits getötet), wie entferne ich ihn aus der Ausgabe von 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 [anyprogramd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
1163 root 0 Z [anyprogramd]
ps -o ppid 1163
sagt das aus? Das heißt, wer ist 1163 Eltern? Das ist der Prozess, der beendet werden muss.Antworten:
Ein Zombie ist bereits tot, also kannst du ihn nicht töten. Um einen Zombie zu bereinigen, muss er von seinem Elternteil gewartet werden. Das Töten des Elternteils sollte also funktionieren, um den Zombie zu eliminieren. (Nachdem der Elternteil gestorben ist, wird der Zombie von PID 1 geerbt, der darauf wartet und seinen Eintrag in der Prozesstabelle löscht.) Wenn Ihr Dämon Kinder hervorbringt, die zu Zombies werden, haben Sie einen Fehler. Ihr Daemon sollte bemerken, wann seine Kinder sterben und
wait
auf ihnen, um ihren Exit-Status zu bestimmen.Ein Beispiel dafür, wie Sie ein Signal an jeden Prozess senden können, der der Elternteil eines Zombies ist (beachten Sie, dass dies extrem grob ist und Prozesse töten kann, die Sie nicht beabsichtigen. Ich empfehle nicht, diese Art von Vorschlaghammer zu verwenden):
quelle
ps aux
?kill $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}' | sort -u)
PPid
Reihe, wenn Siecat /proc/<pid>/status
Sie können einen Zombie-Prozess bereinigen, indem Sie den übergeordneten Prozess mit dem folgenden Befehl beenden:
quelle
grep
ist nicht nötig.ps ... | awk '/[zZ]/{print $2}'
Ich habe es versucht:
das wird funktionieren :)
quelle
Gefunden unter http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/
2) Hier ein toller Tipp von einem anderen Benutzer (Thxs Bill Dandreta): Manchmal
wird keinen Prozess beenden. Lauf
Das 4. Feld ist der Elternprozess. Töte alle Eltern eines Zombies und der Zombie stirbt!
Beispiel
18581
,18582
,18583
Sind Zombies -hat keine Wirkung.
entfernt die Zombies.
quelle
init
Nun, das hat mich gerade umgebracht , und jetzt kann ich nichts mehr tun und bin gezwungen, neu zu starten. Der Zombie-Prozess ist Java und nimmt 3,4 GB aus 4 GB RAM herausIch habe es versucht
und es funktioniert bei mir.
quelle