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!