Möchten Sie mehr über die Linux-Administration erfahren? Entdecken Sie diese Linux-Schulungen.
- Einführung in Linux (LFS101x) – Kostenlos
- Grundlagen der Linux-Systemadministration (LFS201)
In diesem Tutorial aus unserem Archiv erfahren Sie, wie Sie fehlerhafte Prozesse beenden.
Stellen Sie sich Folgendes vor: Sie haben eine Anwendung gestartet (sei es über Ihr bevorzugtes Desktop-Menü oder über die Befehlszeile) und verwenden diese gestartete App, nur um sie zu sperren, die Leistung einzustellen oder unerwartet zu sterben. Sie versuchen, die App erneut auszuführen, aber es stellt sich heraus, dass das Original nie wirklich vollständig heruntergefahren wurde.
Was machst du? Sie töten den Prozess. Aber wie? Ob Sie es glauben oder nicht, Ihre beste Wette liegt meistens in der Befehlszeile. Glücklicherweise verfügt Linux über alle notwendigen Tools, um Sie als Benutzer in die Lage zu versetzen, einen fehlerhaften Prozess zu beenden. Bevor Sie diesen Befehl jedoch sofort starten, um den Prozess abzubrechen, müssen Sie zunächst wissen, um welchen Prozess es sich handelt. Wie kümmern Sie sich um diese vielschichtige Aufgabe? Es ist eigentlich ganz einfach … sobald Sie die Werkzeuge kennen, die Ihnen zur Verfügung stehen.
Lassen Sie mich Ihnen diese Tools vorstellen.
Die Schritte, die ich skizzieren werde, funktionieren auf fast jeder Linux-Distribution, egal ob es sich um einen Desktop oder einen Server handelt. Ich werde mich streng mit der Befehlszeile befassen, also öffne dein Terminal und bereite dich auf die Eingabe vor.
Lokalisieren des Prozesses
Der erste Schritt zum Beenden des nicht reagierenden Prozesses besteht darin, ihn zu lokalisieren. Es gibt zwei Befehle, mit denen ich einen Prozess finde: top und ps . Top ist ein Tool, das jeder Administrator kennen lernen sollte. Mit top erhalten Sie eine vollständige Liste der aktuell laufenden Prozesse. Klicken Sie in der Befehlszeile auf top, um eine Liste der laufenden Prozesse anzuzeigen (Abbildung 1).
Aus dieser Liste sehen Sie einige ziemlich wichtige Informationen. Angenommen, Chrome reagiert nicht mehr. Gemäß unserer Top-Anzeige können wir feststellen, dass vier Instanzen von Chrome mit den Prozess-IDs (PID) 3827, 3919, 10764 und 11679 ausgeführt werden. Diese Informationen sind wichtig für eine bestimmte Methode zum Beenden des Prozesses.
Obwohl top unglaublich praktisch ist, ist es nicht immer das effizienteste Mittel, um die benötigten Informationen zu erhalten. Nehmen wir an, Sie wissen, dass der Chrome-Prozess das ist, was Sie töten müssen, und Sie möchten nicht die von Chrome angebotenen Echtzeitinformationen durchsehen müssen. Dazu können Sie den Befehl ps verwenden und die Ausgabe über grep filtern. Der Befehl ps meldet einen Snapshot eines aktuellen Prozesses und grep druckt Zeilen, die einem Muster entsprechen. Der Grund, warum wir ps durch grep filtern, ist einfach: Wenn Sie den Befehl ps selbst ausführen, erhalten Sie eine Momentaufnahme aller aktuellen Prozesse. Wir möchten nur die Liste mit Chrome verknüpfen. Dieser Befehl würde also folgendermaßen aussehen:
ps aux | grep chrome
Die Aux-Optionen lauten wie folgt:
-
a = zeige Prozesse für alle Benutzer an
-
u = zeige den Benutzer /Besitzer des Prozesses an
-
x = zeige auch Prozesse an, die nicht an ein Terminal angeschlossen sind
dies ist wichtig, wenn Sie nach Informationen zu einer grafischen Anwendung suchen.
Wenn Sie den obigen Befehl ausführen, erhalten Sie mehr Informationen, als Sie zum Beenden eines Prozesses benötigen (Abbildung 2), dies ist jedoch manchmal effizienter als die Verwendung von top .
Beenden des Prozesses
Jetzt kommen wir zur Aufgabe, den Prozess zu beenden. Wir haben zwei Informationen, die uns helfen, den fehlerhaften Prozess zu beenden:
-
Prozessname
-
Prozess-ID
Die Sie verwenden, bestimmt den Befehl, der für die Beendigung verwendet wird. Es gibt zwei Befehle, um einen Prozess zu beenden:
-
kill – Kill a process by ID
-
killall – Kill a process by name
Es gibt auch verschiedene Signale, die an beide Kill-Befehle gesendet werden können. Welches Signal Sie senden, hängt davon ab, welche Ergebnisse Sie vom Kill-Befehl erwarten. Zum Beispiel können Sie das HUP-Signal (Hang up) an den kill-Befehl senden, der den Prozess effektiv neu startet. Dies ist immer eine kluge Wahl, wenn der Prozess sofort neu gestartet werden muss (z. B. im Fall eines Daemons). Sie können eine Liste aller Signale erhalten, die an den Befehl kill gesendet werden können, indem Sie kill -l . Sie werden eine ziemlich große Anzahl von Signalen finden (Abbildung 3).
Die häufigsten Kill-Signale sind:
Signal Name |
Single Value |
Effect |
SIGHUP |
Hangup |
|
SIGINT |
Interrupt from keyboard |
|
SIGKILL |
Kill signal |
|
SIGTERM |
Termination signal |
|
SIGSTOP |
17, 19, 23 |
Stop the process |
Das Schöne daran ist, dass Sie den Signalwert anstelle des Signalnamens verwenden können. Sie müssen sich also nicht alle Namen der verschiedenen Signale merken. Lassen Sie uns nun den Befehl kill verwenden, um unsere Chrome-Instanz zu beenden. Die Struktur für diesen Befehl wäre:
kill SIGNAL PID
Wobei SIGNAL das zu sendende Signal und PID die zu tötende Prozess-ID ist. Wir wissen bereits aus unserem ps-Befehl, dass die IDs, die wir töten wollen, 3827, 3919, 10764 und 11679 sind. Um das Kill-Signal zu senden, geben wir die Befehle aus:
kill -9 3827kill -9 3919kill -9 10764kill -9 11679
Sobald wir die obigen Befehle ausgegeben haben, wurden alle Chrome-Prozesse erfolgreich beendet.
Nehmen wir den einfachen Weg! Wenn wir bereits wissen, dass der Prozess, den wir beenden möchten, chrome heißt, können wir den Befehl killall verwenden und dasselbe Signal an den Prozess senden:
killall -9 chrome
Die einzige Einschränkung des obigen Befehls besteht darin, dass möglicherweise nicht alle laufenden Chrome-Prozesse abgefangen werden. Wenn Sie nach dem Ausführen des obigen Befehls den Befehl ps aux | grep chrome ps aux/grep chrome und sehen, dass die verbleibenden Prozesse ausgeführt werden, kehren Sie am besten zum Befehl kill zurück und senden Sie Signal 9, um den Prozess per PID zu beenden.
Prozesse beenden leicht gemacht
Wie Sie sehen, ist das Beenden fehlerhafter Prozesse bei weitem nicht so schwierig, wie Sie vielleicht gedacht haben. Wenn ich einen hartnäckigen Prozess habe, beginne ich mit dem Befehl killall, da dies der effizienteste Weg zur Beendigung ist. Wenn Sie jedoch mit einem wirklich lebhaften Prozess enden, ist der Kill-Befehl der richtige Weg.
Erfahren Sie mehr über Linux durch den kostenlosen Kurs „Introduction to Linux“ der Linux Foundation und edX.