Connect with us

Wie man

Was ist ein „Zombie-Prozess“ unter Linux?

Was ist ein "Zombie-Prozess" unter Linux?

Wenn Sie ein Linux-Benutzer sind, haben Sie möglicherweise Zombie-Prozesse in Ihrer Prozessliste gesehen. Sie können einen Zombie-Prozess nicht beenden, weil er bereits tot ist – wie ein tatsächlicher Zombie.

Zombies sind im Grunde die übrig gebliebenen Teile toter Prozesse, die nicht richtig aufgeräumt wurden. Ein Programm, das Zombie-Prozesse erstellt, ist nicht richtig programmiert – Programme dürfen Zombie-Prozesse nicht zulassen.

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 über die Funktionsweise von Prozessen unter Linux wissen.

Wenn ein Prozess unter Linux stirbt, wird nicht sofort alles aus dem Speicher entfernt – sein Prozessdeskriptor bleibt im Speicher (der Prozessdeskriptor benötigt nur eine winzige Menge an Speicher). Der Status des Prozesses lautet 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 Systemaufruf wait () ausführen, um den Exit-Status des toten Prozesses und andere Informationen zu lesen. Dadurch kann der übergeordnete Prozess Informationen aus dem toten Prozess abrufen. Nach dem Aufruf von wait () wird der Zombie-Prozess vollständig aus dem Speicher entfernt.

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

Dienstprogramme wie GNOME System Monitor, die oben Befehl, und die ps Befehl Anzeige Zombie-Prozesse.

Gefahren von Zombie-Prozessen

Zombie-Prozesse verbrauchen keine Systemressourcen. (Tatsächlich verwendet jeder eine sehr kleine Menge Systemspeicher, um seinen Prozessdeskriptor zu speichern.) Jeder Zombie-Prozess behält jedoch seine Prozess-ID (PID) bei. Linux-Systeme haben eine begrenzte Anzahl von Prozess-IDs – standardmäßig 32767 auf 32-Bit-Systemen. Wenn sich Zombies sehr schnell ansammeln – beispielsweise wenn falsch programmierte Serversoftware unter Last Zombie-Prozesse erstellt – wird der gesamte Pool verfügbarer PIDs schließlich Zombie-Prozessen zugewiesen, wodurch verhindert wird, dass andere Prozesse gestartet werden.

Einige herumhängende Zombie-Prozesse sind jedoch kein Problem – obwohl sie auf einen Fehler mit dem übergeordneten Prozess auf Ihrem System hinweisen.

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 Zombie-Prozesse nur dann loswerden müssen, wenn Sie eine große Menge auf Ihrem System haben – einige Zombies sind harmlos. Es gibt jedoch einige Möglichkeiten, wie Sie Zombie-Prozesse loswerden können.

Eine Möglichkeit besteht darin, das SIGCHLD-Signal an den übergeordneten Prozess zu senden. Dieses Signal weist den übergeordneten Prozess an, den Systemaufruf wait () auszuführen und seine untergeordneten Zombies zu bereinigen. Senden Sie das Signal mit dem töten Befehl, der im folgenden Befehl durch die PID des übergeordneten Prozesses ersetzt wird:

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 töten oder schließen. Wenn der Prozess, der die Zombies erstellt hat, endet, erbt init die Zombieprozesse und wird ihr neuer Elternteil. (init ist der erste Prozess, der unter Linux beim Booten gestartet wird und dem PID 1 zugewiesen wurde.) init führt regelmäßig den Systemaufruf wait () aus, um seine Zombie-Kinder zu bereinigen, sodass init die Zombies kurz bearbeitet. Sie können den übergeordneten Prozess nach dem Schließen neu starten.

Wenn ein übergeordneter Prozess weiterhin Zombies erstellt, sollte dies behoben werden, damit wait () ordnungsgemäß aufgerufen wird, um seine untergeordneten Zombies zu ernten. Legen Sie einen Fehlerbericht ab, wenn ein Programm auf Ihrem System weiterhin Zombies erstellt.

Continue Reading
Click to comment

Leave a Reply

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

Tendencia