Soll ich den Zombie-Prozess in meinem System beenden?


20

Da ich Neuling in Linux / Unix-Systemen bin und nur über Zombie-Prozesse lese , habe ich eine Frage. Ich habe gerade 10 davon. Muss ich sie töten und wenn ja, warum? Belasten sie mein System?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
Keine Notwendigkeit, sie zu töten. Sie sind bereits tot.
Marco

2
Sie laden also mein System nicht mehr. Und sie werden so bleiben, bis ich das System neu starte oder sie töte, oder?
Jason Paddle

7
@Marco: Du kannst nicht töten, was schon tot ist. Aber Sie können seine Eltern töten, Harrharr!
Wullxz

7
Das Problem ist, dass ihre Eltern sie nicht geerntet haben (als sie starben).
Ypercubeᵀᴹ

3
10 Zombies ??? Du bist befallen! Jason rennt.
Luc M

Antworten:


29

Du kannst keinen Zombie töten, er ist bereits tot.

Die Ressourcen dieses Prozesses sind frei und für andere Prozesse verfügbar. Was bleibt, ist ein Eintrag in der Prozesstabelle. Dies hat keinen Einfluss auf die Leistung, keine Sorge.


Ja, das macht Sinn. Ich kann Elternprozess töten. Danke für die Info. Ich wollte nur wissen, ob sie laden oder kein System.
Jason Paddle

Ich glaube, es gibt eine Grenze von Zombies. Ich denke, es ist 1024, also schadet es nicht der Leistung, aber ich denke, es gibt eine Obergrenze für die Anzahl, die Sie haben können.
ProfessionalAmateur

@ProfessionalAmateur Was passiert, wenn Sie das Zombie-Limit (1024 oder was auch immer) erreicht haben?
Roddy der gefrorenen Erbsen

@RoddyoftheFrozenPeas - Um ehrlich zu sein, ich bin mir nicht sicher, ob ich sie immer aufgeräumt habe, bevor ich zu diesem Punkt gekommen bin. Ich stelle mir vor, dass das System versuchen wird, einen anderen Zombie zu erstellen, und möglicherweise eine Speicherverletzung oder einen anderen schweren Fehler, einen Überlauf oder einen Segmentierungsfehler aufweist.
ProfessionalAmateur

2
@ProfessionalAmateur: Unter Linux gibt es kein Zombie-Limit . Zombie-PIDs unterliegen /proc/sys/kernel/pid_maxgenau wie jede andere PID.
Rsaw

16

Was sind diese Zombie-Prozesse, die in ps auftauchen? Ich töte sie, aber sie gehen nicht weg!

Zombies sind tote Prozesse. Du kannst 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 (sehen Sie sich die von ps -l angezeigte PPID an). 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.

Quelle: http://www.linuxsa.org.au/tips/zombies.html

Und für den Fall, dass Sie sich auf einem Amoklauf befinden, könnte dieser Superuser-Thread für Sie interessant sein: Wie finden Sie den übergeordneten Prozess eines Zombie-Prozesses?


Beachten Sie, dass das Reparieren des Elternteils zu viel sein kann - vielleicht ist es noch nicht so weit, auf seine Kinder zu warten. Vielleicht macht es das später (oder ja, vielleicht nicht).
Romain

ja, du hast Recht. In der Antwort auf die Frage, die ich verknüpft habe, erfahren Sie, wie Sie den übergeordneten Prozess bestimmen. So haben Sie immer die Möglichkeit, zu überprüfen, durch welche Prozesse die Zombies entstehen, und zu entscheiden, ob es erforderlich ist, sie am Laufen zu halten.
Wullxz

7

Du musst sie nicht töten.

Grundlegendes Verständnis aufbauen:

Jeder Prozess ist das Kind eines übergeordneten Prozesses (mit Ausnahme des Init-Prozesses, aber darüber müssen wir uns keine Gedanken machen).

Wenn ein untergeordneter Prozess die Ausführung beendet hat, enthält er möglicherweise noch Daten, auf die der übergeordnete Prozess zugreifen möchte, normalerweise einen Beendigungscode, der das Ergebnis des untergeordneten Prozesses beschreibt.

Ein fertiger untergeordneter Prozess hängt in der Prozesstabelle als Zombie-Prozess herum, bis der übergeordnete Prozess den untergeordneten Prozess "erntet" oder wartet. Dies ist einfach der übergeordnete Prozess, der dem Betriebssystem mitteilt, dass dieser untergeordnete Prozess nicht mehr benötigt wird. Es hat alle gewünschten Rückgabewerte gelesen und ist damit fertig. Zu diesem Zeitpunkt räumt das System den Eintrag in der Prozesstabelle auf.


3

Dieser Vorgang muss nicht abgebrochen werden.

Nur für den Fall, dass Sie es trotzdem töten möchten (aus welchem ​​Grund auch immer), stellen Sie sicher, dass Sie auf den Kopf schießen. Hier ist ein nützlicher Befehl:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

Von https://www.erianna.com/kill-a-linux-zombie-process


1
+1 für shoot at the head.
BenjiWiebe
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.