Was ist ein Zombie-Prozess unter Linux?

Inhaltsverzeichnis:

Video: Was ist ein Zombie-Prozess unter Linux?

Video: Was ist ein Zombie-Prozess unter Linux?
Video: So gehen Betrüger bei Ebay-Kleinanzeigen vor | Marktcheck SWR 2024, März
Was ist ein Zombie-Prozess unter Linux?
Was ist ein Zombie-Prozess unter Linux?
Anonim
Wenn Sie ein Linux-Benutzer sind, haben Sie möglicherweise Zombie-Prozesse in Ihrer Prozessliste gesehen. Sie können einen Zombie-Prozess nicht beenden, da er bereits tot ist - wie ein echter Zombie.
Wenn Sie ein Linux-Benutzer sind, haben Sie möglicherweise Zombie-Prozesse in Ihrer Prozessliste gesehen. Sie können einen Zombie-Prozess nicht beenden, da er bereits tot ist - wie ein echter Zombie.

Zombies sind im Grunde die Überbleibsel von toten Prozessen, die noch nicht richtig aufgeräumt wurden. Ein Programm, das Zombie-Prozesse erstellt, ist nicht ordnungsgemäß programmiert. Es ist nicht beabsichtigt, dass Programme Zombie-Prozesse durchhalten.

Was ist ein Zombie-Prozess?

Um zu verstehen, was ein Zombie-Prozess ist und was dazu führt, dass Zombie-Prozesse angezeigt werden, müssen Sie ein wenig darüber verstehen, wie Prozesse unter Linux funktionieren.

Wenn ein Prozess unter Linux abstürzt, wird er nicht sofort aus dem Arbeitsspeicher entfernt - der Prozessdeskriptor bleibt im Arbeitsspeicher (der Prozessdeskriptor benötigt nur wenig Speicherplatz). Der Status des Prozesses wird zu EXIT_ZOMBIE und der übergeordnete Prozess des Prozesses wird benachrichtigt, dass sein untergeordneter Prozess mit dem SIGCHLD-Signal gestorben ist. Der übergeordnete Prozess soll dann den wait () -Systemaufruf ausführen, um den Exitstatus des toten Prozesses und andere Informationen zu lesen. Dadurch kann der übergeordnete Prozess Informationen aus dem nicht aktiven Prozess abrufen. Nach dem Aufruf von wait () wird der Zombie-Prozess vollständig aus dem Speicher entfernt.

Dies geschieht normalerweise sehr schnell, so dass sich auf Ihrem System keine Zombie-Prozesse ansammeln. Wenn ein übergeordneter Prozess jedoch nicht richtig programmiert ist und nie wait () aufruft, bleiben seine Zombie-Kinder im Speicher, bis sie aufgeräumt sind.

Dienstprogramme wie der GNOME-Systemmonitor oben Befehl und die ps Befehl Anzeige Zombie-Prozesse.

Image
Image

Gefahren von Zombie-Prozessen

Zombie-Prozesse verbrauchen keine Systemressourcen. (Eigentlich verwendet jeder eine sehr kleine Menge Systemspeicher, um seinen Prozessdeskriptor zu speichern.) Allerdings behält jeder Zombie-Prozess seine Prozess-ID (PID). Linux-Systeme verfügen über eine begrenzte Anzahl von Prozess-IDs - standardmäßig 32767 auf 32-Bit-Systemen. Wenn sich Zombies sehr schnell ansammeln - zum Beispiel, wenn eine nicht ordnungsgemäß programmierte Serversoftware Zombie-Prozesse unter Last erzeugt - wird der gesamte Pool der verfügbaren PIDs schließlich Zombie-Prozessen zugewiesen, so dass andere Prozesse nicht gestartet werden können.

Einige wenige Zombie-Prozesse sind jedoch kein Problem - obwohl sie auf einen Fehler bei ihrem übergeordneten Prozess in Ihrem System hinweisen.

Image
Image

Zombie-Prozesse loswerden

Sie können Zombie-Prozesse nicht beenden, da Sie normale Prozesse mit dem SIGKILL-Signal beenden können. Zombie-Prozesse sind bereits tot. Denken Sie daran, dass Sie die Zombie-Prozesse nicht loswerden müssen, es sei denn, Sie haben eine große Menge auf Ihrem System - einige Zombies sind harmlos. Es gibt jedoch einige Möglichkeiten, Zombie-Prozesse zu beseitigen.

Eine Möglichkeit ist das Senden des SIGCHLD-Signals an den übergeordneten Prozess. Dieses Signal weist den übergeordneten Prozess an, den wait () - Systemaufruf auszuführen und seine Zombie-Kinder zu säubern. Senden Sie das Signal mit töten Befehl, Ersetzen pid im folgenden Befehl mit der PID des übergeordneten Prozesses:

kill -s SIGCHLD pid

Wenn der übergeordnete Prozess jedoch nicht richtig programmiert ist und SIGCHLD-Signale ignoriert, hilft dies nicht. Sie müssen den übergeordneten Prozess der Zombies beenden oder beenden. Wenn der Prozess, der die Zombies erstellt hat, endet, erbt init die Zombie-Prozesse und wird zu ihrem neuen übergeordneten Element. (init ist der erste Prozess, der beim Booten unter Linux gestartet wurde und der PID 1 zugewiesen wird.) init führt regelmäßig den wait () -Systemaufruf aus, um seine Zombie-Kinder zu bereinigen, sodass init die Zombies in kurzer Zeit erledigt. Sie können den übergeordneten Prozess nach dem Schließen erneut starten.

Wenn ein übergeordneter Prozess weiterhin Zombies erstellt, sollte dies behoben werden, damit wait () ordnungsgemäß aufgerufen wird, um seine Zombie-Kinder zu ernten. Senden Sie einen Fehlerbericht, wenn ein Programm in Ihrem System ständig Zombies erstellt.

Empfohlen: