Was sind Zombie-Prozesse unter Linux und wie kann man sie beenden?
Zombie-Prozess. Nicht jeder hat von diesem interessanten, aber beängstigenden Wort gehört, das sich auf das Linux-Betriebssystem bezieht. Auf einem PC stellen Zombie-Prozesse möglicherweise keine Bedrohung für einen normalen Benutzer dar. Bei Linux-Servern müssen diese Prozesse jedoch identifiziert und gestoppt werden.
Solche Prozesse können Probleme mit der Prozesstabelle Ihres Systems verursachen und wiederum die ordnungsgemäße Funktion Ihrer Maschine beeinträchtigen. Daher werden wir in diesem Artikel ausführlich auf Zombie-Prozesse sowie eine umfassende Anleitung zum Auffinden und Beenden von Zombie-Prozessen auf einem Linux-Computer eingehen.
Was sind Zombie-Prozesse?
Vor allem aber ist es wichtig, dass Sie wissen, was Zombie-Prozesse wirklich sind. Dies sind nichts anderes als tote und nicht mehr funktionierende Prozesse, die Speicherplatz in der Systemprozesstabelle belegen. Ein Prozesssteuerungsblock oder eine Leiterplatte ist eine Datenstruktur, in der Details zu einzelnen Prozessen gespeichert sind, die auf Ihrem System ausgeführt werden.
Die Prozesstabelle besteht aus der Prozess-ID, einem Link zur Leiterplatte und anderen nützlichen Informationen zum Prozess. Zombie-Prozesse haben ihre eigenen Prozess-IDs und Speicherverwaltungsinformationen. Da für das Linux-Betriebssystem nur eine begrenzte Anzahl von Prozess-IDs verfügbar ist, können andere Prozesse die PIDs erst verwenden, wenn der Zombie-Prozess gestoppt ist.
Obwohl ein oder zwei Zombie-Prozesse keine Störungen oder Leistungsprobleme auf Ihrem Computer verursachen, kann eine große Anzahl solcher Prozesse den Workflow Ihres Systems beeinträchtigen, indem die Prozesstabelle und die Ressourcen überflutet werden.
Was verursacht Zombie-Prozesse unter Linux?
Um die zugrunde liegende Ursache eines Zombie-Prozesses im Detail zu verstehen, müssen Sie lernen, wie Prozesse unter Linux gestartet und gestoppt werden. Das Linux-Betriebssystem überwacht alle laufenden Prozesse und Dämonen auf einem Computer. Die Prozesstabelle ist eine Liste von Strukturen, die alle Prozesse enthält, die derzeit auf Ihrem Computer ausgeführt werden.
Jeder Prozesseintrag in der Prozesstabelle besteht aus einer Verknüpfung mit dem Prozesssteuerungsblock dieses bestimmten Prozesses. Die Leiterplatte speichert die Details, die diesem bestimmten Prozess zugeordnet sind. Diese Details umfassen:
- Prozessstatus : Der aktuelle Status des Prozesses
- Prozessnummer: eindeutige Nummer verwendet , um den Prozess zu identifizieren
- Programmzähler : Enthält Informationen zur nächsten Anweisung
- Register : Liste aller vom Prozess verwendeten CPU-Register
- Dateiliste öffnen : Vom Prozess verwendete Dateien
- CPU-Planungsinformationen : Enthält Informationen zur CPU-Zeit und zu den dem Prozess zugewiesenen Ressourcen
- Speicherverwaltungsinformationen : Enthält Details zur vom Prozess verwendeten Speichermenge
- E / A-Informationen : Liste der vom Prozess verwendeten Eingabe- oder Ausgabegeräte
Linux verwendet die folgenden Prozesszustände, um alle seine Prozesse zu beschreiben.
- R : Prozess wird ausgeführt
- S : Schlafprozess
- D : Ununterbrochener Schlafprozess
- T : Prozess beendet
- Z : Zombie-Prozess
Immer wenn ein Prozess die zugewiesene Aufgabe abschließt, wird sein Prozessstatus als Zombie oder Z festgelegt . Jeder Prozess verfügt über einen übergeordneten Prozess, der eine Funktionsfamilie mit dem Namen wait () aufruft, die auf die Statusänderung eines Prozesses wartet. Wenn sich beispielsweise der Prozessstatus von " Ausführen" in " Zombie" ändert, wird die Methode wait () ausgelöst.
Die wait () -Methode löscht normalerweise den Prozesssteuerungsblock, der sich auf diesen Zombie-Prozess bezieht, und entfernt dann den Eintrag dieses Prozesses aus der Prozesstabelle.
Aufgrund der schlechten Entwicklung eines Programms ruft der übergeordnete Prozess manchmal die Funktion wait () nicht auf . Infolgedessen löscht das System die Leiterplatte des Zombie-Prozesses nicht. Der Prozesstabelleneintrag für diesen bestimmten Prozess bleibt ebenfalls erhalten.
Dies gewährt dem Zombie-Prozess eine unendliche Lebensdauer. Da das System den Prozess nicht beenden kann, wird der Prozesseintrag niemals gelöscht und die PID wird niemals freigegeben.
Wie finde ich Zombie-Prozesse?
Der erste Schritt zum Entfernen von Zombie-Prozessen auf Ihrem System besteht darin, zu analysieren, welcher Prozess den Zombie- Prozessstatus hat. Während Sie diese Prozesse nicht direkt beenden können, da das System sie bereits aus dem Speicher entfernt hat, können Sie den ihnen zugeordneten übergeordneten Prozess beenden.
Zuerst müssen Sie überprüfen, ob die Prozesstabelle Ihres Systems einen Zombie-Prozess enthält. Sie können dies einfach mit dem Befehl top tun. Öffnen Sie einfach Ihr Terminal und geben Sie Folgendes ein:
top
Sie sehen eine ähnliche Ausgabe wie diese. Beachten Sie die Anzahl der Zombie-Prozesse oben im Terminalfenster. Wenn die Ausgabe Null ist, brauchen Sie sich keine Sorgen zu machen.
Sie können Informationen zu diesen Zombie-Prozessen auflisten, indem Sie den Befehl ps mit egrep weiterleiten . Egrep ist eine Erweiterung des Befehls grep unter Linux, die alle Muster als erweiterte Regex-Zeichenfolge behandelt.
Geben Sie den folgenden Befehl ein, um alle Zombie-Prozesse aufzulisten:
ps aux | egrep "Z|defunct"
Der zuvor erwähnte Befehl wird für die Linien suchen , die entweder Z oder gelöschtes in der Ausgabe von dem Befehl ps erzeugt enthalten. Die Ausgabe besteht aus einer Liste der Zombie-Prozesse, die auf Ihrem System ausgeführt werden.
Töten von Zombie-Prozessen mit dem Befehl kill
Jetzt, da Sie wissen, welche Zombie-Prozesse derzeit Ihre Systemressourcen verschlingen, ist es Zeit, diese Prozesse zu beenden.
Während der einfachste Weg, Zombie-Prozesse zu beenden, darin besteht, Ihren Computer neu zu starten, ist dies manchmal keine praktikable Option, insbesondere wenn Sie einen Server verwalten.
Um Zombie-Prozesse zu beenden, ohne Ihren Server herunterzufahren, notieren Sie sich die Prozess-ID eines Zombie-Prozesses. Aus dem vorherigen Abschnitt können wir ersehen, dass die PID des Zombie-Prozesses 18614 war. Verwenden Sie dann diese PID, um die ID des übergeordneten Prozesses zu ermitteln.
ps -o ppid= -p 18614
Ausgabe:
18613
Überprüfen Sie mit dem Befehl ps, ob die übergeordnete Prozess-ID vorhanden ist.
ps -e | grep 18613
Nachdem wir die Existenz des übergeordneten Prozesses bestätigt haben, ist es Zeit, ihn zu beenden. Übergeben Sie das -SIGKILL- Flag mit dem Befehl kill wie folgt:
sudo kill -SIGKILL 18613
Sobald Sie den übergeordneten Prozess beendet haben, löscht das System den Zombie-Prozess und entfernt ihn automatisch aus der Prozesstabelle.
Effizientes Verwalten von Prozessen unter Linux
Jeder Systemadministrator muss Überwachungsprozesse priorisieren, die auf einem Linux-Computer ausgeführt werden. Obwohl Zombie-Prozesse nicht unbedingt schädlich für Ihr System sind, können sie Leistungsprobleme verursachen, wenn sie in großer Anzahl vorhanden sind.
Wenn Sie ein Linux-Anfänger sind und keine Ahnung haben, wie das Linux-Betriebssystem Prozesse verwaltet, ist es ein guter Anfang, zuerst zu lernen, was Prozesse sind.