Zombies sind tote Prozesse. Sie können nicht "töten" sein (Sie können die TOTEN nicht töten). Alle Prozesse sterben irgendwann ab und werden dann zu Zombies. Sie verbrauchen fast keine Ressourcen, was zu erwarten ist, weil sie tot sind! Der Grund für Zombies ist, dass der übergeordnete Teil (Prozess) des Zombies den Beendigungsstatus und die Ressourcenverwendungsstatistik des Zombies abrufen kann. Das übergeordnete Element signalisiert dem Betriebssystem, dass es den Zombie nicht mehr benötigt, indem es einen der Systemaufrufe wait () verwendet.
Wenn ein Prozess stirbt, werden seine untergeordneten Prozesse alle zu untergeordneten Prozessen des Prozesses Nummer 1, der der Initialisierungsprozess ist. Init wartet immer darauf, dass Kinder sterben, damit sie nicht als Zombies zurückbleiben.
Wenn Sie Zombie-Prozesse haben, bedeutet dies, dass die Eltern nicht auf diese Zombies gewartet haben (siehe PPID von ps -l
). Sie haben drei Möglichkeiten: Korrigieren Sie den übergeordneten Prozess (lassen Sie ihn warten); töte die Eltern; oder damit leben. Denken Sie daran, dass es nicht so schwer ist, damit zu leben, weil Zombies nur wenig mehr als eine zusätzliche Zeile in der Ausgabe von ps belegen.
Zombies können in der Ausgabe des Unix ps-Befehls durch das Vorhandensein eines "Z" in der STAT-Spalte identifiziert werden. Zombies, die länger als eine kurze Zeit bestehen, weisen in der Regel auf einen Fehler im übergeordneten Programm hin. Wie bei anderen Lecks ist das Vorhandensein einiger Zombies an sich nicht besorgniserregend, kann jedoch auf ein Problem hinweisen, das bei höheren Lasten ernsthaft werden würde.
Um Zombies aus einem System zu entfernen, kann das SIGCHLD-Signal mithilfe des Befehls kill manuell an das übergeordnete Element gesendet werden. Wenn sich der übergeordnete Prozess immer noch weigert, den Zombie zu ernten, besteht der nächste Schritt darin, den übergeordneten Prozess zu entfernen. Wenn ein Prozess sein übergeordnetes Element verliert, wird init zu seinem neuen übergeordneten Element. Init führt regelmäßig den Systemaufruf wait aus, um alle Zombies mit init als übergeordnetem Element zu ernten.
Es gibt auch verwaiste Prozesse, bei denen es sich um einen Computerprozess handelt, dessen übergeordneter Prozess beendet oder beendet wurde.
Ein Prozess kann während des Remote-Aufrufs verwaist werden, wenn der Client-Prozess abstürzt, nachdem eine Anforderung an den Server gesendet wurde.
Waisenkinder verschwenden Serverressourcen und können einen Server möglicherweise in Schwierigkeiten bringen (Dies ist der größte Ressourcenunterschied zwischen Zombies und Waisenkindern (außer wenn Sie einen Waisenzombie-Film sehen). Es gibt jedoch verschiedene Lösungen für das Problem des Waisenprozesses:
Ausrottung ist die am häufigsten verwendete Technik; In diesem Fall wird der Waisenprozess beendet.
Reinkarnation ist eine Technik, bei der Maschinen regelmäßig versuchen, die Eltern entfernter Berechnungen zu lokalisieren. Zu diesem Zeitpunkt werden verwaiste Prozesse beendet.
Ablauf ist eine Technik, bei der jedem Prozess eine bestimmte Zeitspanne bis zum Abschluss zugeteilt wird, bevor er beendet wird. Bei Bedarf kann ein Prozess "nach mehr Zeit fragen", bevor die zugewiesene Zeit abläuft.
Ein Prozess kann auch verwaist sein und auf demselben Computer wie sein übergeordneter Prozess ausgeführt werden. In einem UNIX-ähnlichen Betriebssystem wird jeder verwaiste Prozess sofort vom speziellen Systemprozess "init" übernommen. Dieser Vorgang wird als erneute Elternschaft bezeichnet und erfolgt automatisch. Obwohl der Prozess technisch gesehen den "init" -Prozess als übergeordneten Prozess hat, wird er immer noch als verwaister Prozess bezeichnet, da der Prozess, der ihn ursprünglich erstellt hat, nicht mehr existiert.
Mehr Info:
http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU
http://www.linuxsa.org.au/tips/zombies.html
http://www.brighthub.com/computing/linux/articles/79186.aspx
Identifizieren und Beenden des Hängeprozesses, wenn das System hängt und langsam auf Benutzereingaben reagiert
Beenden eines laufenden Prozesses auf einem Ubuntu-Rechner von einem Windows-Rechner im LAN aus