it-swarm.com.de

Was sind Zombie-Prozesse?

Mit Befehlen wie top und dem GUI-basierten System Monitor kann ich sehen, dass ich momentan 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?

138
Jesper

Zombies sind tote Prozesse. Sie können nicht "töten" sein (Sie können die TOTEN nicht töten). Alle Prozesse sterben schließlich, und wenn sie dies tun, werden sie 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 Leckagen ist das Vorhandensein einiger Zombies an sich nicht besorgniserregend, kann jedoch auf ein Problem hinweisen, das bei höheren Belastungen ernsthaft werden würde.

Um Zombies von einem System zu entfernen, kann das SIGCHLD-Signal mit dem Befehl kill manuell an das übergeordnete System 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 er eine Anfrage an den Server gestellt hat.

Waisenkinder verschwenden Serverressourcen und können möglicherweise Probleme mit Servern verursachen (Dies ist der größte Ressourcenunterschied zwischen Zombies und Waisenkindern (außer wenn Sie einen Waisenzombie-Film sehen).

  1. Ausrottung ist die am häufigsten verwendete Technik; In diesem Fall wird der Orphan-Prozess 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 Orphan-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#ixzz1PCN9voj

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

162
Luis Alvarado

Zombie-Prozesse (werden auch als <defunct> angezeigt) 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 mehr genügend Speicherplatz in der Prozesstabelle vorhanden ist (Sie können cat /proc/sys/kernel/threads-max verwenden, um festzustellen, wie viele Einträge auf Ihrem System zulässig sind).

Sie werden nur angezeigt, wenn der übergeordnete Prozess (d. H. Der Prozess, der sie fork()'ed) aktiviert hat, die Systemfunktion wait() jedoch noch nicht aufgerufen hat. Sobald ein Elternteil stirbt, sind die Zombies wait()'ed für init und verschwinden.

20
vartec

Wenn ein child process beendet wird, wird sein Tod dem übergeordneten Element mitgeteilt, damit das übergeordnete Element geeignete Maßnahmen ergreifen kann.

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

Sie haben completed their execution, haben aber noch einen entry im process table.

7
Prateek Joshi

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 sein ü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

1
Ijaz Ahmad Khan