Zombie-Prozesse finden und entfernen

Zombie-Prozesse (oder auch „verwaiste“ Prozesse) sind Prozesse, die zwar beendet wurden, aber noch als Eintrag in der Prozess-Tabelle auftauchen. Sie sind keine vollwertigen Prozesse mehr sondern vielmehr Hüllen, deren Exit-Status von ihrem übergeordneten Elternprozess noch nicht gelesen und somit vollständig beendet wurden. Dadurch beanspruchen sie zwar kaum Ressourcen, können jedoch deshalb problematisch sein, da die Prozess-Tabelle unter Linux nur eine begrenzte Anzahl an Einträgen zulässt.
Viel kann man gegen diese Zombie-Prozesse leider nicht tun. Trotzdem schauen wir uns die vorhandenen Möglichkeiten im folgenden Artikel einmal genauer an.

Wie entsteht ein Zombie-Prozess?

Wie eingangs erwähnt entsteht ein Zombie-Prozess, wenn ein Kindprozess beendet wird, der Elternprozess jedoch dessen Statusinformation noch nicht abgerufen hat. Für gewöhnlich sollten Zombie-Prozesse in gut geführten Anwendungen von alleine wieder verschwinden, da der Status ihrer Kindprozesse regelmäßig abgefragt werden. Passiert dies nicht, wird die Prozess-Tabelle mit diesen beendeten Kindprozessen vollgemüllt. Dies kann im schlimmsten Fall dazu führen, dass irgendwann keine neuen Prozesse mehr gestartet werden können. Das wäre in einem produktiven System natürlich fatal.

Zombie-Prozesse ausfindig machen

Zombie-Prozesse lassen sich mit dem altbekannten Tool zur Prozessverwaltung ps auslesen:

ps aux | grep 'Z'

Die Zeile STAT verrät nun mit einem Z den Zombie-Status.
Alternativ bietet auch top diese Möglichkeit.

top

Dort können wir (je nach Version) die Spalten mit Shift + f sortieren. In der Spalte S werden auch hier Zombie-Prozesse mit dem Buchstaben Z kenntlich gemacht.

Zombie-Prozesse entfernen

Nachdem nun festgestellt wurde, dass Zombie-Prozesse auf dem System wandeln, kann mit deren Entfernung begonnen werden. Da diese keine eigenständigen Prozesse darstellen, bedarf es einer alternativen Technik sie zu entfernen. Zunächst versuchen wir ihre sogenannten Parent Process ID (also den Elternprozess des Zombies) ausfindig zu machen und zu beenden:

ps -axj

Innerhalb dieser Auflistung sind die beiden Spalten PPID und STAT für uns interessant (wir erinnern uns, dass Zombies innerhalb der STAT-Spalte mit einem Z gekennzeichnet sind). Anschließend können wir den Elternprozess mit Hilfe der entsprechenden PPID und dem folgendem Befehl neustarten:

sudo kill -HUP <PPID des Elternprozess>

Sollte der Neustart keine Besserung bringen, können wir versuchen, den Elternprozess zu beenden:

sudo kill -TERM <PPID des Elternprozess>

Sollten auch nach Ausführung dieses Befehls noch immer Zombie-Prozesse übrig bleiben, hilft als letzte Maßnahme leider nur noch der komplette Neustart des Systems!

sudo reboot

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen