Boolesche Welt

linux kill cover image

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 – toppspidof 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.

Der oberste Befehl, der eine Liste der Prozesse anzeigt.

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 zeigt ps 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.

Die Ergebnisse des Befehls "ps aux"."ps aux" command.

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

Filterprozesse mit ps und grep mit einem positiven Ergebnis.

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:

Filterprozesse mit ps und grep.

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 psgrep 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.

Der Befehl pidof

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.

Der Befehl pgrep.

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 topps -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 — killkillallpkill 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 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.