So beenden Sie Prozesse über das Linux-Terminal

Das Beenden eines Prozesses ist manchmal die einzige Möglichkeit, ihn loszuwerden. Trotz des harten Namens bedeutet „Töten“ eines Prozesses nur „zwingen, ihn zu beenden“. Hier erfahren Sie, wie Sie dies über die Linux- oder macOS-Befehlszeile tun.

Was ist ein Prozess?

Das Ausführen von Programmen wie Ihrem Webbrowser, Hintergrundprozesse, die mit Ihrer Desktop-Umgebung verbunden sind, und Linux-Systemdienste sind alles Prozesse.

Sie können Prozesse in zwei Gruppen einteilen:

Vordergrundprozesse sind Prozesse, die von einem Benutzer gestartet oder gestartet wurden. Sie können sich in einem Terminalfenster befinden oder eine grafische Anwendung sein.
Hintergrundprozesse sind alle Prozesse, die automatisch gestartet werden und keine Interaktion mit Benutzern haben. Sie erwarten keine Eingaben von Benutzern und präsentieren ihnen auch keine Ergebnisse oder Ausgaben. Hintergrundprozesse sind Dinge wie Dienste und Daemons.

Wenn die Vordergrundprozesse die Front des Theaterpersonals und die Schauspieler sind, sind die Hintergrundprozesse das Backstage-Team „hinter den Kulissen“.

Wenn Prozesse sich schlecht verhalten oder nicht funktionieren, können sie zu viel CPU-Zeit beanspruchen, Ihren Arbeitsspeicher verbrauchen oder in eine enge Rechenschleife geraten und nicht mehr reagieren. Grafische Anwendungen können sich weigern, auf Mausklicks zu reagieren. Terminalanwendungen bringen Sie möglicherweise nie zur Eingabeaufforderung zurück.

Die humane Antwort

Einen Prozess zu „töten“ bedeutet nur, „den Prozess zum Beenden zu zwingen“. Dies kann erforderlich sein, wenn der Prozess sich weigert zu antworten.

Linux bietet die Befehle kill, pkill und killall, damit Sie genau das tun können. Diese Befehle können mit jeder Art von Prozess, Grafik oder Befehlszeile, Vordergrund oder Hintergrund verwendet werden.

Das Tötungskommando

Um kill verwenden zu können, müssen Sie die Prozess-ID (PID) des Prozesses kennen, den Sie beenden möchten. Der Befehl ps kann verwendet werden, um die PID eines Prozesses zu finden.

  Wie man Battlefield V unter Linux spielt

Damit ps alle Prozesse durchsucht, verwenden Sie die Option -e (alle Prozesse). Es ist ratsam, die Ausgabe durch weniger zu leiten, es wird ziemlich viel davon geben. Geben Sie ps ein, ein Leerzeichen, -e, ein Leerzeichen, | (ein Pipe-Zeichen), ein weiteres Leerzeichen und dann weniger eingeben. Drücken Sie die Eingabetaste, um den Befehl auszuführen.

ps -e | less

Dadurch erhalten Sie eine Prozessliste, die dem folgenden Screenshot ähnelt. Sie können mit der Taste / in weniger vorwärts und mit der Taste ? rückwärts suchen. Schlüssel.

Um den gewünschten Prozess näher kennenzulernen, leiten Sie die Ausgabe von ps durch grep und geben Sie den Namen – oder einen Teil des Namens – des Prozesses an.

ps -e | grep shutter

Sobald Sie die PID des Prozesses gefunden haben, den Sie beenden möchten, übergeben Sie sie als Parameter an den Kill-Befehl. Um den durch den vorherigen Befehl identifizierten Verschlussvorgang zu beenden, verwenden Sie diesen Befehl:

kill 2099

Der Kill-Befehl ist ein stiller Attentäter – er gibt Ihnen keine Rückmeldung, wenn er erfolgreich war.

Das pkill-Kommando

Mit dem Befehl pkill können Sie einen Prozess – oder Prozesse – nach Namen beenden. Sie müssen den Prozess nicht anhand der PID identifizieren. Um pkill zu verwenden, geben Sie einen Suchbegriff ein, den pkill verwendet, um die Liste der laufenden Prozesse abzugleichen. Matching-Prozesse werden beendet. Sie müssen also sicher sein, dass der Suchbegriff richtig geschrieben ist.

Als Sicherheitsnetz können Sie den Befehl pgrep verwenden, bevor Sie den Befehl pkill verwenden. Der Befehl pgrep akzeptiert auch einen Suchbegriff. Es wird die PID jedes Prozesses aufgelistet, der dem Suchbegriff entspricht. Dies ist sicher, da pgrep kein Kill-Signal an die Prozesse ausgibt und wenn Sie den Suchbegriff falsch eingeben, werden Sie nicht versehentlich einen anderen Prozess beenden. Sie können sicherstellen, dass der Suchbegriff richtig durchdacht ist, bevor Sie ihn an pkill übergeben. Sowohl pkill als auch pgrep behandeln den Suchbegriff gleich. Ihre Behandlung ist so ähnlich, dass sie teile dieselbe Manpage.

  So verschlüsseln Sie Dropbox-Daten unter Linux

Nehmen wir an, es gibt einen Prozess mit „subq“ im Namen. Wir verwenden das ps -u dave | grep-Befehl, um einen Blick hinter den Vorhang zu werfen. Sie können sehen, dass „subq“ diesem Prozess und diesem Prozess allein entspricht. Das war nur, damit Sie den vollständigen Namen des Prozesses sehen können.

ps -u dave | grep subq

Nehmen wir an, unser Benutzer hat das nicht getan; Sie wissen nur, dass der Prozessname die Teilzeichenfolge „subq“ enthält. Sie verwenden pgrep, um zu überprüfen, ob es nur eine Übereinstimmung mit dem Suchbegriff gibt. Diesen Suchbegriff verwenden sie dann mit pkill.

pgrep subq
pkill subq

Sie können pkill verwenden, um mehrere Prozesse gleichzeitig zu beenden. Hier führt der Benutzer pgrep aus, um zu überprüfen, wie viele Prozesse Chrome gestartet hat. Sie benutzen pkill, um sie alle zu töten. Dann überprüfen sie mit pgrep, ob sie alle entfernt wurden.

pgrep chrome
pkill chrome
pgrep chrome

Wenn mehrere Prozesse mit demselben Namen laufen, Sie aber nicht alle beenden möchten, können Sie pgrep mit der Option -f (Befehlszeile) verwenden, um herauszufinden, welcher Prozess welcher ist. Ein einfaches Beispiel wären zwei Ping-Prozesse. Sie wollen einen von ihnen töten, aber nicht den anderen. Sie können ihre Befehlszeilen verwenden, um sie zu unterscheiden. Beachten Sie die Verwendung von Anführungszeichen zum Umschließen des Befehlszeilenparameters.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

Das Killall-Kommando

Warnung: In den Betriebssystemen Solaris und OpenIndiana beendet der Befehl killall alle Prozesse, die Ihnen gehören. Wenn Sie root sind oder sudo killall ausgegeben haben, starten Sie Ihren Computer neu! Während der Recherche für diesen Artikel wurde dieses Verhalten mit der neuesten Version von OpenIndiana Hipster 2018.10 bestätigt.

  So überprüfen Sie Ihre CPU unter Linux

Der Killall-Befehl funktioniert ähnlich zum Befehl pkill, jedoch mit einem spezifischen Unterschied. Anstatt einen Suchbegriff an den Befehl zu übergeben, müssen Sie den genauen Prozessnamen angeben.

Sie können einem Prozessnamen keine teilweise Übereinstimmung bereitstellen; Sie müssen den gesamten Prozessnamen wie gezeigt angeben:

killall shutt
killall shutter

Mit der Option -y (jünger als) können Sie Prozesse beenden, die weniger als einen bestimmten Zeitraum ausgeführt haben. Der Zeitraum wird in Zahlen gefolgt von einer dieser Einheiten angegeben:

s (Sekunden)
m (Minuten)
h (Stunden)
d (Tage)
w (Wochen)
M (Monate, Anmerkung, Großbuchstabe „M“)
j (Jahre)

Um einen gerade gestarteten Prozess namens ana zu beenden und alle älteren Instanzen von ana laufen zu lassen, könnten Sie die folgenden Parameter mit killall verwenden, wenn Sie innerhalb von zwei Minuten reagiert hätten:

killall -y 2m ana

Mit der Option -o (älter als) können Sie Prozesse beenden, die länger als einen angegebenen Zeitraum ausgeführt wurden. Dieser Befehl beendet alle SSH-Verbindungen, die länger als einen Tag laufen:

killall -o 1d sshd

Sei nicht zu glücklich

Diese Befehle ermöglichen es Ihnen, fehlerhafte Prozesse mit Genauigkeit und Sicherheit korrekt zu identifizieren und zu beenden.

Seien Sie immer vorsichtig. Stellen Sie zunächst sicher, dass der Prozess, den Sie töten möchten, wirklich der ist, den Sie wollen. Zweitens, überprüfen Sie es noch einmal – seien Sie vorsichtig und stellen Sie sicher, dass der angestrebte Prozess der ist, den Sie beenden möchten. Fahren Sie mit dem Beenden des Vorgangs fort, wenn Sie zufrieden sind.