In einem Betriebssystem gibt es viele Programme, die entweder von einem Benutzer oder vom Betriebssystem selbst ausgeführt werden können (z. B. Systemdienste). Solche Programme, die auf dem System ausgeführt werden, werden als „Prozesse“ bezeichnet. Normalerweise wird ein Prozess von selbst beendet, wenn er mit seiner Aufgabe fertig ist oder wenn Sie ihn auffordern, ihn zu beenden, indem Sie eine Tastenkombination drücken oder auf die Schaltfläche „Schließen“ klicken.
Manchmal kann ein Prozess jedoch hängen bleiben oder viel CPU oder RAM verbrauchen. In dieser Situation möchten Sie den Prozess manuell „beenden“. In diesem Artikel werden wir uns verschiedene Tools ansehen, mit denen Sie Prozesse auf einem Linux-System beenden können.
Den Prozess finden, der beendet werden soll
Um einen Prozess zu beenden, sollten Sie zuerst die Details des Prozesses suchen. Sie können dies über drei Befehle tun – top
ps
pidof
und pgrep
. Je nach Situation können Sie einen dieser Befehle zu diesem Zweck verwenden.
Wie wir später in diesem Artikel sehen werden, können Sie einen Prozess anhand seines Namens oder seiner Prozess-ID (PID) beenden. Die PID ist eine Zahl, die einen Prozess eindeutig identifiziert. Das Töten durch die Prozess-ID ist nützlich, wenn Sie nur einen bestimmten Prozess beenden möchten. Andererseits ist das Beenden anhand des Prozessnamens nützlich, wenn Sie alle laufenden Instanzen eines bestimmten Programms beenden möchten.
Lokalisieren des Prozesses mit dem Befehl top
Wir werden uns zuerst den Befehl top
ansehen. Starten Sie den Befehl top, indem Sie Folgendes eingeben:
top
Sie erhalten eine interaktive Oberfläche, wie unten gezeigt. Sie können diese Liste durchsuchen, um den Namen oder die PID des Prozesses zu finden, den Sie beenden möchten.
Um diese Liste zu durchsuchen, können Sie die Aufwärts- / Abwärtstasten verwenden. Darüber hinaus bietet der Befehl top auch Möglichkeiten zum Filtern von Prozessen nach CPU-Auslastung, Benutzer- und Prozessnamen, über die Sie in diesem Handbuch lesen können.
Die linke Spalte enthält die PID des Prozesses, und die rechte Seite enthält den Programmnamen. Als Beispiel haben wir im obigen Screenshot den vnstatd
Prozess mit einer Prozess-ID von 263 .
Lokalisieren des Prozesses mit den Befehlen ps und grep
Eine andere Möglichkeit, eine Liste der Prozesse abzurufen, besteht darin, Folgendes auszuführen:
ps aux
Im obigen Befehl haben wir die Flags aux
verwendet, die die folgenden Bedeutungen haben:
-
a
: Prozesse für alle Benutzer anzeigen -
u
: Zeigt den Benutzer an, der den Prozess verwendet -
x
: Alle Prozesse anzeigen. (Ohne dies zeigtps
keine Prozesse an, die in einer GUI-Umgebung ausgeführt werden.)
Die Ausgabe des Befehls ähnelt der von top
. Die PID ist in der zweiten Spalte von links verfügbar, und der Prozessname ist in der Spalte ganz rechts verfügbar.
Der Vorteil der Verwendung von ps
besteht darin, dass Sie diese Liste einfach mit dem Befehl grep
filtern können. Um beispielsweise einen Prozess zu finden, der mit dem Begriff „vnstat“ verknüpft ist, können Sie Folgendes verwenden:
ps aux | grep -i vnstat
Hier haben wir zwei Ergebnisse erhalten — den vnstatd
-Prozess sowie den grep
-Prozess. Da wir nach allen Instanzen des Begriffs „vnstat“ gesucht haben und auch grep
mit „vnstat“ als Argument ausgeführt haben, haben wir auch grep
in den Ergebnissen.
Selbst wenn keine „vnstat“ -bezogenen Prozesse ausgeführt werden, erhalten wir einen Eintrag, der den grep
-Prozess anzeigt:
Obwohl wir also ein Ergebnis erhalten haben, gibt es keine Prozesse, die für uns von Interesse sind.
Finden der PID mit pidof und pgrep
Die Kombination top
und ps
grep
ermöglicht die Suche nach Prozessen. Wenn Sie andererseits den genauen Namen eines Prozesses kennen, können Sie pidof
, um seine PID zu finden.
Die Verwendung von pidof
ist ziemlich einfach. Um die PIDs eines Prozesses mit dem genauen Namen „nginx“ zu erhalten, verwenden Sie:
pidof nginx
Wenn es Prozesse mit dem genauen Namen „nginx“ gibt, erhalten Sie eine Liste der PIDs, wie unten gezeigt. Wenn es keine gibt, erhalten Sie nichts als Ausgabe.
Wenn Sie den vollständigen Namen nicht kennen, können Sie pgrep
anstelle von pidof
. Um beispielsweise nach allen Prozessen zu suchen, die „nginx“ irgendwo in ihrem Namen enthalten, führen Sie Folgendes aus:
pgrep ngin
Dadurch werden Prozesse mit dem genauen Namen „nginx“ sowie alle anderen Prozesse abgeglichen, die denselben Kriterien entsprechen. Beachten Sie für unser System, dass wir im obigen Screenshot alle PIDs erhalten, die zu „nginx“ gehörten.
Die pidof
undpkill
Befehle geben Ihnen weit weniger Informationen. Wie wir im nächsten Abschnitt sehen werden, gibt es einige Umstände, unter denen Sie einen Prozess nicht beenden können. Die Ausgabe von top
und ps
enthält zusätzliche Informationen, anhand derer Sie feststellen können, ob Sie einen Prozess wirklich beenden können.
Welche Prozesse können Sie beenden?
Nachdem wir den Prozess lokalisiert haben, ist es an der Zeit, ihn zu beenden. Bevor wir jedoch lernen, wie es geht, müssen Sie einige Dinge wissen.
Wenn Sie ein normaler Benutzer sind, können Sie Ihre eigenen Prozesse beenden, aber nicht diejenigen, die anderen Benutzern gehören. Sowohl top
als auch ps
zeigen den Benutzer an, unter dem ein Prozess läuft. Im Fall von top
enthält die zweite Spalte den Benutzernamen. Mit ps aux
enthält die erste Spalte den Benutzernamen.
Ein Root-Benutzer kann jedoch alle Prozesse beenden. Sie können entweder vor jedem Befehl sudo
hinzufügen, um es als root auszuführen, oder eine Root-Shell erhalten, indem Sie su
eingeben und dann den Befehl ausführen.
In Linux wird beim Beenden eines Prozesses ein „Terminierungssignal“ an den Prozess gesendet. Obwohl es viele verschiedene Arten von Signalen gibt, beschäftigen wir uns hauptsächlich mit den Signalen „SIGTERM“ und „SIGKILL“. Sie haben einen numerischen Wert von 15 bzw. 9. Standardmäßig verwenden alle Befehle zum Beenden von Prozessen „SIGTERM“, wodurch das Programm Code ausführen kann, bevor es beendet wird, sodass es „ordnungsgemäß“ beendet werden kann. Wenn Sie den Prozess gewaltsam beenden möchten, können Sie stattdessen „SIGKILL“ verwenden.
Der Linux-Kernel verwaltet einige Informationen über den Status eines Prozesses. Wenn ein Prozess beendet wird, muss der Kernel die Informationen aufbewahren, damit der übergeordnete Prozess herausfinden kann, ob der untergeordnete Prozess seine Aufgaben ausführen konnte und ob er von selbst beendet wurde oder getötet wurde. Bis das übergeordnete Element dies getan hat, werden diese „Zombie“ -Prozesse in der Liste der Prozesse angezeigt. Sie können einen solchen Prozess nicht beenden, da es sich nur um einen Eintrag in der Liste aller Prozesse handelt und ihm kein tatsächlicher Prozess zugeordnet ist.
Wenn ein Prozess Eingabe- / Ausgabeoperationen ausführt (z. B. Lesen von oder Schreiben auf Datenträger), befindet er sich in einem Zustand des „unterbrechungsfreien Ruhezustands“. Sie können einen Prozess in diesem Zustand nicht beenden.
Sie können anhand der 8. Spalte der top
ps
-Ausgabe feststellen, ob sich ein Prozess im Zustand „Zombie“(Z) oder „unterbrechungsfreier Ruhezustand“(D) befindet.
Beenden eines Prozesses
Es gibt verschiedene Befehle, mit denen Sie einen Prozess beenden können — kill
killall
pkill
und top
. Wir beginnen mit dem einfachsten: dem Befehl killall
.
Prozesse mit dem Befehl killall beenden
Der Befehl killall
ist eine der einfachsten Möglichkeiten, einen Prozess zu beenden. Wenn Sie den genauen Namen eines Prozesses kennen und wissen, dass er nicht als anderer Benutzer ausgeführt wird und sich nicht im Status Z oder D befindet, können Sie diesen Befehl direkt verwenden.
Standardmäßig zum Beispiel, um einen Prozess namens „firefox“zu töten, run:
killall firefox
Um den Prozess mit SIGKILL gewaltsam zu töten, run:
killall -9 firefox
Sie können auch -SIGKILL
anstelle von -9
.
Wenn Sie Prozesse interaktiv beenden möchten, können Sie -i
wie folgt verwenden:
killall -i firefox
Wenn Sie einen Prozess beenden möchten, der als anderer Benutzer ausgeführt wird, können Sie sudo
:
sudo killall firefox
Mit den Flags -o
und -y
können Sie auch einen Prozess beenden, der für einen bestimmten Zeitraum ausgeführt wurde. Wenn Sie also einen Prozess beenden möchten, der länger als 30 Minuten ausgeführt wurde, verwenden Sie:
killall -o 30m <process-name>
Wenn Sie einen Prozess beenden möchten, der weniger als 30 Minuten ausgeführt wurde, verwenden Sie:
killall -y 30m <process-name>
Verwenden Sie in ähnlicher Weise die folgenden Abkürzungen für die:
s | seconds |
m | minutes |
h | hours |
d | days |
w | weeks |
M | months |
y | years |
Killing processes with the pkill command
Sometimes, you only know part of a program’s name. Genau wie pgrep
können Sie mit pkill
Prozesse beenden, die auf partial matches basieren. Wenn Sie beispielsweise alle Prozesse beenden möchten, die den Namen apache
im Namen enthalten, führen Sie Folgendes aus:
pkill apache
Wenn Sie anstelle eines SIGTERM ein SIGKILL verwenden möchten, verwenden Sie:
pkill -9 apache
Sie können auch-SIGKILL
anstelle von -9
.
Prozesse mit dem Befehl kill beenden
Die Verwendung des Befehls kill ist unkompliziert. Sobald Sie die PID des Prozesses ermittelt haben, den Sie beenden möchten, können Sie ihn mit dem Befehl kill
beenden. Wenn Sie beispielsweise einen Prozess mit einer PID von 1234 beenden möchten, verwenden Sie den folgenden Befehl:
kill 1234
Wie bereits erwähnt, wird standardmäßig ein SIGTERM . Um ein SIGKILL zu verwenden, verwenden Sie -9
oder -SIGKILL
wie wir bereits gesehen haben:
kill -9 1234
Prozesse mit dem Befehl top beenden
Es ist sehr einfach, Prozesse mit dem top
Befehl. Suchen Sie zuerst nach dem Prozess, den Sie beenden möchten, und notieren Sie sich die PID. Drücken Sie dann k
, während top ausgeführt wird (Groß- und Kleinschreibung beachten). Sie werden aufgefordert, die PID des Prozesses einzugeben, den Sie beenden möchten.
Drücken Sie nach Eingabe der PID die Eingabetaste. Jetzt wird gefragt, welches Signal Sie verwenden möchten, um den Prozess zu beenden. Wenn Sie SIGTERM(15) verwenden möchten, drücken Sie einfach die Eingabetaste, da dies das Standardsignal ist. Wenn Sie SIGKILL(9) verwenden möchten, geben Sie 9 ein und drücken Sie die Eingabetaste.
Wenn Sie die Prozess-ID leer lassen und direkt die Eingabetaste drücken, wird der oberste Prozess in der Liste beendet. Sie können mit den Pfeiltasten scrollen und den Prozess ändern, den Sie auf diese Weise beenden möchten.
Fazit
In diesem Beitrag haben wir die verschiedenen Möglichkeiten gesehen, Prozesse unter Linux zu beenden. Das Erlernen dieser Befehle ist für die ordnungsgemäße Systemadministration und -verwaltung unerlässlich. Wenn Sie mehr von diesen Befehlen erkunden möchten, werfen Sie einen Blick auf ihre jeweiligen Man-Seiten.
Wenn dir dieser Beitrag gefallen hat, teile ihn bitte 🙂