Zombies

Nein, nicht die Untoten aus dem Kino sind gemeint. Es geht vielmehr um Prozesse in unixoiden Betriebssystemen, die als sg. Zombie-Prozess markiert worden sind.

 

Dieser Beitrag hat mir heute klar gemacht, was dort tatsächlich passiert, und dass Zombies ansich erstmal nichts ganz schlimmes sind:

 

http://de.wikipedia.org/wiki/Zombie_%28Informatik%29

Dort steht auch ein einfaches Rezept drin, Zombies wieder loszuwerden, was anderenortes auch schonmal als unmöglich bezeichnet wird.

Ich zitiere:

„Ein Zombieprozess kann in der Unix-Prozesstabelle in der Regel durch den Status „Z“ (für Zombie) erkannt werden (zum Beispiel mit ps axo stat,pid,comm | grep '^Z'). Durch das kill-Kommando kann das Signal SIGKILL an die PID des Zombieprozesses gesendet werden, um diesen zwangsweise aus der Prozesstabelle zu löschen. Es kann bei dieser Methode jedoch zu unvorhergesehenen Nebenwirkungen kommen, falls der Vaterprozess noch läuft und zu einem späteren Zeitpunkt auf den Status seines Kindprozesses zugreifen möchte.

Alternativ kann man dem Vaterprozess des Zombies (laut PPID-Angabe in der Prozesstabelle, zum Beispiel von ps axo stat,pid,comm,ppid | grep '^Z') manuell das Signal SIGCHLD senden, auf der Kommandozeile etwa mittels kill -CHLD . Reagiert der Vater darauf nicht, so kann man den Vaterprozess beenden, damit das Zombie-Kind vom init-Prozess adoptiert und sofort danach durch Abfrage seines Zustands endgültig gelöscht wird.“

Die erste Methode funktioniert meiner Erfahrung nach in der Regel nicht. Der Prozess bleibt einfach bestehen. Erfolg hatte ich mit dem Senden von SIGCHLD an den Elternprozess und anschließendem Beenden des Elternprozesses.

Schreibe einen Kommentar