Was sind Zombie-Prozesse?

127

Mit Befehlen wie top und dem GUI-basierten System Monitor kann ich sehen, dass ich im Moment mehrere Zombie-Prozesse habe.

Was sind Zombie-Prozesse?

Beeinflussen sie die Leistung des Systems oder der Anwendung, zu der sie gehören? Verwenden sie zu viel Speicher oder überhaupt Speicher?

    
Jesper 14.06.2011, 00:27
quelle

3 Antworten

151

Zombies sind DEAD-Prozesse. Sie können nicht "töten" (Du kannst den DEAD nicht töten). Alle Prozesse sterben schließlich, und wenn sie es 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 Elternteil (Prozess) des Zombies den Status des Exits und die Ressourcennutzung des Zombies abrufen kann. Der Elternteil signalisiert dem Betriebssystem, dass er den Zombie nicht mehr benötigt, indem er einen der wait () - Systemaufrufe verwendet.

Wenn ein Prozess abbricht, werden seine untergeordneten Prozesse alle zu untergeordneten Elementen mit Prozessnummer 1, was der Initialisierungsprozess ist. Init wartet immer darauf, dass Kinder sterben, damit sie nicht als Zombies bleiben.

Wenn Sie Zombie-Prozesse haben, bedeutet das, dass diese Zombies nicht von ihren Eltern gewartet wurden (schauen Sie sich die PPID an, die von ps -l angezeigt wird). Sie haben drei Möglichkeiten: Fixieren Sie den übergeordneten Prozess (warten Sie); töte den Elternteil; oder lebe damit. Denken Sie daran, dass das Leben damit nicht so schwer ist, weil Zombies wenig mehr als eine zusätzliche Zeile in der Ausgabe von ps aufnehmen.

Zombies können in der Ausgabe des Befehls Unix ps durch das Vorhandensein eines "Z" in der Spalte STAT identifiziert werden. Zombies, die länger als eine kurze Zeit existieren, weisen normalerweise auf einen Fehler im übergeordneten Programm hin. Wie bei anderen Lecks ist das Vorhandensein von ein paar Zombies an sich nicht besorgniserregend, kann jedoch auf ein Problem hinweisen, das unter schwereren Lasten ernst werden würde.

Um Zombies aus einem System zu entfernen, kann das SIGCHLD-Signal mit dem Befehl kill manuell an das übergeordnete System gesendet werden. Wenn der Elternprozess immer noch nicht bereit ist, den Zombie zu ernten, wäre der nächste Schritt, den Elternprozess zu entfernen. Wenn ein Prozess seinen Elternknoten verliert, wird init zum neuen Elternknoten. Init führt den Systemwarteaufruf regelmäßig aus, um Zombies mit init als Eltern zu ernten.

Es gibt auch verwaiste Prozesse , bei denen es sich um einen Computerprozess handelt, dessen Elternprozess beendet oder beendet wurde.

Ein Prozess kann während des Remoteaufrufs verwaist werden, wenn der Clientprozess abstürzt, nachdem er eine Anfrage an den Server gestellt hat.

Waisen verschwenden Serverressourcen und können möglicherweise einen Server in Schwierigkeiten bringen (Dies ist der größte Ressourcenunterschied zwischen Zombies und Waisen (Außer wenn Sie einen Orphan-Zombie-Film sehen). Allerdings gibt es mehrere Lösungen für das Problem des verwaisten Prozesses:

  1. Vernichtung ist die am häufigsten verwendete Technik; In diesem Fall wird der verwaiste Prozess beendet.

  2. Reinkarnation ist eine Technik, bei der Maschinen periodisch versuchen, die Eltern irgendwelcher entfernten Berechnungen zu lokalisieren; An diesem Punkt werden verwaiste Prozesse getötet.

  3. Ablauf ist eine Technik, bei der jedem Prozess eine bestimmte Zeit zugewiesen wird, bevor er getötet wird. Bei Bedarf kann ein Prozess nachfragen, bis die zugewiesene Zeit abgelaufen ist.

Ein Prozess kann auch verwaist sein, wenn er auf demselben Computer wie der übergeordnete Prozess ausgeführt wird. In einem UNIX-ähnlichen Betriebssystem wird jeder verwaiste Prozess sofort vom speziellen "init" -Systemprozess übernommen. Diese Operation wird als erneute Ersetzung bezeichnet und erfolgt automatisch. Obwohl der Prozess technisch den Prozess "init" als übergeordnetes Element hat, wird er immer noch als verwaistes Verfahren bezeichnet, da der Prozess, der ihn ursprünglich erstellt hat, nicht mehr existiert.

Weitere Informationen:

Pfandrecht

Pfandrecht

Pfandrecht

Wie zu identifizieren und kill hanging process, wenn das System hängt und langsam auf Benutzereingaben reagiert?

Killing ein laufender Prozess in einer Ubuntu-Maschine von einem Windows-Rechner, der sich im LAN befindet

    
Luis Alvarado 14.06.2011, 00:39
quelle
20

Zombie-Prozesse (die auch als <defunct> angezeigt werden) sind 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, ist der Platz in der Prozesstabelle (Sie können cat /proc/sys/kernel/threads-max verwenden, um zu sehen, wie viele Einträge auf Ihrem System erlaubt sind).

Sie werden nur angezeigt, wenn ihr übergeordneter Prozess (d. h. Prozess fork()'ed sie) aktiv ist, aber noch nicht wait() Systemfunktion aufgerufen hat. Sobald der Elternteil stirbt, sind die Zombies wait()'ed für by init und verschwinden.

    
vartec 14.06.2011 11:36
quelle
6

Wenn ein child process endet, wird sein Tod an seine Eltern weitergegeben, so dass der Elternteil geeignete Maßnahmen ergreifen kann.

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

Sie haben completed their execution , aber immer noch entry in process table .

    
Prateek Joshi 14.10.2015 18:11
quelle

Tags und Links