Mit Befehlen wie top
und der GUI-basierten System Monitor
kann 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?
Antworten:
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
quelle
init
ruftwait
alle seine untergeordneten Prozesse auf, sei es Zombie, verwaist (adoptiert) und biologisch (selbst erschaffen)?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 feststellencat /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()'ed
sie ausführen) aktiv ist, aber noch keinewait()
Systemfunktion aufgerufen hat. Sobald Elternteil stirbt, sind die Zombieswait()'ed
für durchinit
und verschwinden.quelle
top
`Screenshot in dieser Frage scheint dir zu widersprechen? Dort scheint der Zombie 100% von 1 CPU, aber keinen Speicher zu verwenden.Wenn ein
child process
beendet wird, wird sein Tod seinem Elternteil mitgeteilt, damit der Elternteil geeignete Maßnahmen ergreifen kann.Ein Prozess
process
, der darauf wartet, dass sein Elternteil seinen Rückkehrcode akzeptiert, wird als Zombie-Prozess bezeichnet .Sie haben
completed their execution
aber noch eineentry
in derprocess table
.quelle
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
quelle