Was sind Zombie-Prozesse?


138

Mit Befehlen wie topund der GUI-basierten System Monitorkann ich sehen, dass ich im Moment mehrere Zombie-Prozesse habe.

Was sind Zombie-Prozesse?

Beeinträchtigen sie die Leistung des Systems oder der Anwendung, für die sie Zombies sind? Verbrauchen sie zu viel oder gar keinen Speicher?


39
Es sind Prozesse, die Ihre CPU essen möchten;)
Luis Alvarado

8
zum Mittagessen ... :)
RolandiXor

3
Diese Prozesse sind tot, aber nicht begraben.
Prateek Joshi

2
Iss meine CPU ?! Das ist eigentlich furchterregend!
Håvard Geithus

Antworten:


162

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:

  1. Ausrottung ist die am häufigsten verwendete Technik; In diesem Fall wird der Waisenprozess beendet.

  2. Reinkarnation ist eine Technik, bei der Maschinen regelmäßig versuchen, die Eltern entfernter Berechnungen zu lokalisieren. Zu diesem Zeitpunkt werden verwaiste Prozesse beendet.

  3. 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


18
Ekhm! Sie können die Toten töten! Sie müssen nur auf den Kopf zielen. Oder haben sie uns die ganze Zeit angelogen?
Marcin Kaminski

1
initruft waitalle seine untergeordneten Prozesse auf, sei es Zombie, verwaist (adoptiert) und biologisch (selbst erschaffen)?
Blutende Finger

1
gem. nach dem Zweiten Weltkrieg verwenden Tarnung: P
عثمان غني

Bitte gib @MarcinKaminski eine Medaille!
Andrea

20

Zombie-Prozesse (werden auch als angezeigt <defunct>) sind überhaupt keine echten Prozesse. Sie sind nur Einträge in der Kernel-Prozesstabelle. Dies ist die einzige Ressource, die sie verbrauchen. Sie verbrauchen keine CPU oder RAM. Die einzige Gefahr, Zombies zu haben, besteht darin, dass nicht genügend Speicherplatz in der Prozesstabelle zur Verfügung steht (Sie können damit feststellen cat /proc/sys/kernel/threads-max, wie viele Einträge auf Ihrem System zulässig sind).

Sie werden nur angezeigt, wenn ihr übergeordneter Prozess (dh der Prozess, den fork()'edsie ausführen) aktiv ist, aber noch keine wait()Systemfunktion aufgerufen hat. Sobald Elternteil stirbt, sind die Zombies wait()'edfür durch initund verschwinden.


4
Der top`Screenshot in dieser Frage scheint dir zu widersprechen? Dort scheint der Zombie 100% von 1 CPU, aber keinen Speicher zu verwenden.
Torben Gundtofte-Bruun

7

Wenn ein child processbeendet wird, wird sein Tod seinem Elternteil mitgeteilt, damit der Elternteil geeignete Maßnahmen ergreifen kann.

Ein Prozessprocess , der darauf wartet, dass sein Elternteil seinen Rückkehrcode akzeptiert, wird als Zombie-Prozess bezeichnet .

Sie haben completed their executionaber noch eine entryin der process table.


1

Zombie-Prozesse sind Prozesse, die nicht mehr ausgeführt werden, deren Prozesstabelleneintrag jedoch noch vorhanden ist, da der übergeordnete Prozess ihn nicht über den Wait-Syscall abgerufen hat. Technisch gesehen ist jeder Prozess, der beendet wird, für einen sehr kurzen Zeitraum ein Zombie, aber sie könnten länger leben.

Langlebigere Zombieprozesse treten auf, wenn übergeordnete Prozesse den Wartesyscall nicht aufrufen, nachdem der untergeordnete Prozess beendet wurde. Eine Situation, in der dies auftritt, ist, wenn der übergeordnete Prozess schlecht geschrieben ist und den Warteaufruf einfach weglässt, oder wenn der übergeordnete Prozess stirbt, bevor der untergeordnete und der neue übergeordnete Prozess ihn nicht aufruft. Wenn ein übergeordneter Prozess vor dem untergeordneten Prozess stirbt, weist das Betriebssystem den untergeordneten Prozess dem "Init" -Prozess oder der PID 1 zu. Das heißt, der Init-Prozess "übernimmt" den untergeordneten Prozess und wird dessen übergeordneter Prozess. Dies bedeutet, dass jetzt, wenn der untergeordnete Prozess beendet wird, das neue übergeordnete Element (init) waitt aufrufen muss, um seinen Beendigungscode abzurufen, oder sein Prozesstabelleneintrag für immer erhalten bleibt und es zu einem Zombie wird

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.