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

So beenden Sie einen Zombie-Prozess unter Linux

Fröhliche Halloween-Open-SOURCE-Server!

Hier ist eine Geschichte, die so alt ist wie eine Epoche Zeit. Seit es C und Unix und (später) Linux gibt, haben wir Zombies . Insbesondere gibt es Prozesse, die als Zombie-Prozess markiert werden . Von einigen missverstanden, von anderen ignoriert und immun gegen die Bemühungen so vieler von uns, die versuchen zu kill diese Prozesse ohne großen Erfolg. Warum ist das so?

Was ist ein Prozess unter Linux?

Alles beginnt, wenn ein Programm in Linux ausgeführt wird, und wenn dies der Fall ist, wird seine laufende Instanz als Prozess bezeichnet. Mit dem ps können Sie alle Prozesse in Ihrer Linux-Umgebung anzeigen Befehl.

$ ps -ax
        PID TTY         STAT   TIME COMMAND
        1 ?     Ss      0:01 /usr/lib/systemd/systemd rhgb --switched-root --sys
        2 ?     S       0:00 [kthreadd]
        3 ?     I<      0:00 [rcu_gp]
        4 ?     I<      0:00 [rcu_par_gp]

Manchmal startet ein Prozess einen anderen Prozess, wodurch der erste Prozess zum Elternprozess des zweiten wird. Der pstree Befehl ist ein großartiges Tool, mit dem Sie die "Genealogie" der Prozesse auf Ihrem System anzeigen können.

$ pstree -psn
systemd(1)─┬─systemd-journal(952)
        ├─systemd-udevd(963)
        ├─systemd-oomd(1137)
        ├─systemd-resolve(1138)
        ├─systemd-userdbd(1139)─┬─systemd-userwor(12707)
        │                     ├─systemd-userwor(12714)
        │                     └─systemd-userwor(12715)
        ├─auditd(1140)───{auditd}(1141)
        ├─dbus-broker-lau(1164)───dbus-broker(1165)
        ├─avahi-daemon(1166)───avahi-daemon(1196)
        ├─bluetoothd(1167)

Jedem Vorgang wird im System eine Nummer zugeordnet. Die Prozess-ID-Nummer 1 wird dem allerersten Prozess zugewiesen, der während des Startvorgangs ausgeführt wird, und jeder nachfolgende Prozess nach PID 1 ist ein Nachkomme davon. Der PID 1-Prozess ist init , was bei den meisten neueren Linux-Versionen nur ein symbolischer Link zum systemd ist Programm.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Beenden eines Prozesses mit dem Kill-Befehl

Mit dem kill können Sie Prozesse in einem Linux-System beenden   Befehl. Trotz des Namens, der kill Befehl und eine Reihe anderer wie pkill und killall wurde geschrieben/entworfen, um SIGNALE an einen oder mehrere Prozesse zu senden. Wenn nicht angegeben, ist das standardmäßig gesendete SIGNAL das SIGTERM-Signal zum Beenden des Prozesses.

Wenn ein übergeordneter Prozess stirbt oder beendet wird und sein untergeordneter Prozess nicht auf den Tod seines übergeordneten Prozesses folgt, nennen wir diesen Prozess einen verwaisten Prozess .

Wie man einen Zombie-Prozess beendet

Zombie-Prozesse hingegen können nicht getötet werden! Warum könnten Sie fragen? Nun, weil sie bereits tot sind!

Jeder untergeordnete Prozess wird nach Beendigung zu einem Zombie-Prozess und wird dann vom übergeordneten Prozess entfernt. Wenn der Prozess seine Existenz beendet und die von ihm verwendeten Ressourcen freigibt, befindet sich sein Name immer noch in der Prozesstabelle des Betriebssystems. Es ist dann die Prozessaufgabe des Elternteils, seinen Namen aus der Prozesstabelle zu entfernen. Wenn das fehlschlägt, haben wir den Zombie-Prozess, der eigentlich kein Prozess mehr ist, sondern nur noch ein Eintrag in der Prozesstabelle des Betriebssystems.

Aus diesem Grund versuchen Sie, einen kill auszuführen Befehl sogar mit dem -9 (SIGKILL)-Option auf einem nicht mehr existierenden (Zombie-)Prozess funktioniert nicht, weil es nichts zu töten gibt.

Um also einen Zombie-Prozess zu beenden, also um seinen Namen aus der Prozessliste (der Prozesstabelle) zu entfernen, müssen Sie seinen übergeordneten Prozess beenden. Wenn zum Beispiel PID 5878 ein Zombie-Prozess ist und sein Elternprozess PID 4809 ist, dann beenden Sie den Elternprozess (4809), um den Zombie zu töten (5878):

$ sudo kill -9 4809  #4809 is the parent, not the zombie

Meine letzte Warnung vor Zombies. Seien Sie sehr vorsichtig, wenn Sie übergeordnete Prozesse beenden. Wenn der Elternprozess eines Prozesses PID 1 ist und Sie diesen beenden, starten Sie sich selbst neu!

Und das wird eine noch gruseligere Geschichte!


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

  2. Wie beendet man einen Prozess, dessen Eltern Init ist?

  3. Wie beendet man einen Prozess, der auf einem bestimmten Port in Linux läuft?

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

  5. Wie beendet man einen Prozess, der auf einem bestimmten Port in Linux läuft?

So beenden Sie Zombie-Prozesse in Linux

So töten Sie Zombie-Prozesse in Ubuntu 20.04 LTS

So beenden Sie den laufenden Linux-Prozess auf einem bestimmten Port

Wie man einen Prozess unter Linux beendet

So beenden oder beenden Sie einen Linux-Prozess:Der ultimative Leitfaden

So töten Sie Zombie-Prozesse in Ubuntu