GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So finden und töten Sie den Zombie-Prozess in Linux

Kurz:Dies ist ein kurzer Tipp, um Zombie-Prozesse in Linux zu finden und sie dann zu töten. Sie lernen auch einiges über Prozesse und Zombie-Prozesse.

Bevor Sie etwas über den Zombie-Prozess lernen, lassen Sie mich daran erinnern, was ein Prozess in Linux ist.

Kurz gesagt, ein Prozess ist eine laufende Instanz eines Programms in Leistung. Es kann Vordergrund (interaktiver Prozess) oder Hintergrund (nicht interaktiver oder automatischer Prozess) sein. Es kann ein übergeordneter (Ersteller anderer Prozesse während der Laufzeit) oder ein untergeordneter (von anderen erstellter Prozess) Prozess sein.

Unter Linux, mit Ausnahme des ersten init (oder systemd)-Prozesses mit PID 0, hat jeder andere Prozess einen übergeordneten Prozess. Prozesse haben auch ihre eigenen untergeordneten Prozesse.

Glaub mir nicht? Verwenden Sie den pstree Befehl im Terminal, um den Prozessbaum anzusehen, um den „Stammbaum“ der Prozesse Ihres Systems zu sehen.

Was ist ein Zombie-Prozess in Linux?

Wenn ein untergeordneter Prozess stirbt, wird der übergeordnete Prozess informiert, damit er etwas aufräumen kann, wie z. B. Speicher freigeben usw. Der untergeordnete Prozess geht jedoch in den Zombie-Zustand, wenn der übergeordnete Prozess seinen Tod nicht bemerkt. Für den Elternprozess existiert der Kindprozess noch, aber der Kindprozess ist tatsächlich tot. So werden Zombie-Prozesse (auch bekannt als nicht mehr funktionierende Prozesse) erstellt und verbleiben im System.

Hier ist eine ausgezeichnete lustige Version des Zombie-Prozesses von Turnoff.us:

Müssen Sie sich wirklich Sorgen um Zombie-Prozesse machen?

Hier ist wichtig zu sagen, dass Zombie-Prozesse nicht so gefährlich sind, wie der Name klingen mag.

Das Problem kann auftreten, wenn Ihr System über begrenzten Arbeitsspeicher verfügt oder wenn zu viele Zombie-Prozesse Arbeitsspeicher verbrauchen. Außerdem können die meisten Linux-Prozesse eine maximale PID von 32768 haben. Wenn keine IDs für andere produktive Aufgaben verfügbar sind, kann Ihr System abstürzen.

Dies passiert selten, ist aber möglich, insbesondere wenn ein schlecht codiertes Programm anfängt, zahlreiche Zombie-Prozesse zu induzieren.

In einem solchen Fall wäre es eine gute Idee, den Zombie-Prozess zu finden und zu beenden.

Wie finde ich Zombie-Prozesse?

Ein Prozess unter Linux kann einen der folgenden Zustände haben:

  • D =unterbrechungsfreier Schlaf
  • I =Leerlauf
  • R =Laufen
  • S =schlafend
  • T =gestoppt durch Auftragssteuersignal
  • t =vom Debugger während Trace gestoppt
  • Z =Zombie

Aber wo sieht man die Prozesse und ihren jeweiligen Status? Eine einfache Möglichkeit besteht darin, das Terminal und den Top-Befehl zu verwenden.

Wie Sie im obigen Screenshot sehen können, gibt es insgesamt 250 Aufgaben (oder Prozesse), 1 läuft, 248 Prozesse schlafen und 1 befindet sich im Zombie-Status.

Nun stellt sich die Frage, wie man den Zombie-Prozess beendet?

Wie findet und beendet man einen Zombie-Prozess? Kann ein Zombie-Prozess beendet werden?

Ein Zombie-Prozess ist bereits tot. Wie beendet man einen bereits toten Prozess?

In den Zombiefilmen schießt man den Zombies in den Kopf oder verbrennt ihn. Das ist hier keine Option. Sie können Ihr System verbrennen, um den Zombie-Prozess zu beenden, aber das ist keine praktikable Lösung 😉

Einige Leute schlagen vor, das SIGCHLD-Signal an den übergeordneten Prozess zu senden. Aber es wird eher ignoriert. Die andere Möglichkeit, den Zombie-Prozess zu beenden, besteht darin, seinen übergeordneten Prozess zu beenden. Das klingt brutal, aber das ist der einzig sichere Weg, um Zombie-Prozesse zu töten.

Lassen Sie uns also zuerst die Zombie-Prozesse auflisten, um ihre ID zu erfahren. Dies kann mit dem Befehl ps wie diesem im Terminal erreicht werden.

ps ux | awk '{if($8=="Z+") print}'

Die 8. Spalte in der Ausgabe des Befehls ps ux zeigt den Zustand eines Prozesses an. Sie möchten alle übereinstimmenden Zeilen drucken, in denen der Status eines Prozesses Z+ ist (zeigt den Zombie-Status an).

Sobald Sie seine Prozess-ID identifiziert haben, lassen Sie uns die Prozess-ID des übergeordneten Prozesses abrufen.

ps -o ppid= -p <child_id>

Alternativ können Sie die beiden obigen Befehle auf folgende Weise kombinieren, wobei sie direkt die PID des Zombie-Prozesses und die PID seines Elternprozesses liefern.

ps -A -ostat,pid,ppid | grep -e '[zZ]'

Hier erhalten Sie die übergeordnete Prozess-ID, beenden Sie den Prozess also endgültig, indem Sie die Befehlszeile mit der entsprechenden zuvor erhaltenen Prozess-ID eingeben.

kill -9 <parent_process_ID>

Sie können überprüfen, ob der Zombie-Prozess beendet ist oder nicht, indem Sie den Befehl ps erneut ausführen oder sogar den Befehl top.

Herzlichen Glückwunsch! Jetzt wissen Sie, wie man Zombie-Prozesse eliminiert.

Mit Beiträgen von Abhishek Prakash.

Originalartikel


Linux
  1. So beenden Sie einen Zombie-Prozess unter Linux

  2. Was sind Zombie-Prozesse und wie findet und tötet man Zombie-Prozesse?

  3. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  4. Wie finde und beende ich einen Prozess in Ubuntu

  5. Wie man einen Prozess unter Linux anhält/fortsetzt

So finden und töten Sie Zombie-Prozesse in CentOS 8

So finden Sie die Prozess-ID eines Programms und beenden es [Kurztipp]

Wie man einen Prozess unter Linux beendet

So finden Sie die PID und PPID eines Prozesses in Linux

So töten Sie Zombie-Prozesse in Ubuntu

So beenden Sie Prozesse in Linux mit kill, killall und pkill