GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So beenden Sie den Zombie-Prozess

Ein Zombie ist bereits tot, also kannst du ihn nicht töten. Um einen Zombie aufzuräumen, muss er von seinem Elternteil bedient werden, also sollte das Töten des Elternteils funktionieren, um den Zombie zu eliminieren. (Nach dem Tod des Elternteils wird der Zombie von PID 1 geerbt, die darauf wartet und seinen Eintrag in der Prozesstabelle löscht.) Wenn Ihr Daemon Kinder erzeugt, die zu Zombies werden, haben Sie einen Fehler. Ihr Daemon sollte bemerken, wenn 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önnten, der der Elternprozess eines Zombies ist (beachten Sie, dass dies extrem grob ist und Prozesse töten könnte, die Sie nicht beabsichtigen. Ich empfehle nicht, diese Art von Vorschlaghammer zu verwenden):P>

# Don't do this.  Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')

Ich habe versucht:

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}

das wird funktionieren :)


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

2) Hier ein toller Tipp von einem anderen Benutzer (danke Bill Dandreta):Manchmal

kill -9 <pid>

wird keinen Prozess beenden. Ausführen

ps -xal

das 4. Feld ist der Elternprozess, töte alle Eltern eines Zombies und der Zombie stirbt!

Beispiel

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 sind Zombies -

kill -9 18581 18582 18583

hat keine Auswirkung.

kill -9 31706

entfernt die Zombies.


Sie können einen Zombie-Prozess bereinigen, indem Sie seinen übergeordneten Prozess mit dem folgenden Befehl beenden:

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

Linux
  1. So beenden Sie einen Zombie-Prozess unter Linux

  2. Wie beendet man einen Prozess, dessen Eltern Init ist?

  3. Nachkommen verarbeiten?

  4. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  5. Wie lege ich das Arbeitsverzeichnis des übergeordneten Prozesses fest?

So beenden Sie Zombie-Prozesse in Linux

So finden und töten Sie Zombie-Prozesse in CentOS 8

So töten Sie Zombie-Prozesse in Ubuntu 20.04 LTS

So beenden Sie den laufenden Linux-Prozess auf einem bestimmten Port

Wie man einen Prozess unter Linux beendet

So töten Sie Zombie-Prozesse in Ubuntu