Das Beenden eines Prozesses ist manchmal der einzige Weg, 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, Hintergrundprozessen, die mit Ihrer Desktop-Umgebung verknüpft sind, und Linux-Systemdiensten sind alles Prozesse.
Sie können Prozesse in zwei Gruppen einteilen:
- Vordergrundprozesse sind solche, 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 weder Eingaben von Benutzern noch präsentieren sie ihnen Ergebnisse oder Ausgaben. Hintergrundprozesse sind Dinge wie Dienste und Dämonen.
Wenn die Vordergrundprozesse die Front des Theaterpersonals und der Schauspieler sind, sind die Hintergrundprozesse das Backstage-Team „hinter den Kulissen“.
Wenn sich Prozesse schlecht verhalten oder fehlerhaft funktionieren, können sie zu viel CPU-Zeit beanspruchen, Ihren RAM verbrauchen oder in eine enge Rechenschleife eintreten und nicht mehr reagieren. Grafische Anwendungen können sich weigern, auf Mausklicks zu reagieren. Terminalanwendungen kehren 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
töten
,
pkill
, und
töte alle
Befehle, mit denen Sie genau das tun können. Diese Befehle können mit jeder Art von Prozess, Grafik oder Befehlszeile, Vordergrund oder Hintergrund verwendet werden.
Der Kill-Befehl
Benutzen
töten
müssen Sie die Prozess-ID (PID) des Prozesses kennen, den Sie beenden möchten. Das
ps
Befehl kann verwendet werden, um die PID eines Prozesses zu finden.
Haben
ps
Durchsuchen Sie alle Prozesse mit dem
-ist
Option (alle Prozesse). Den Ausgang durchleiten
weniger
ist ratsam, es wird einiges davon geben. Art
ps
, ein Leerzeichen,
-ist
, ein Leerzeichen,
|
(ein Pipe-Zeichen), ein anderes Leerzeichen und geben Sie dann ein
weniger
. 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 vorwärts suchen in
weniger
Verwendung der
/
Taste und Sie können mit der Taste rückwärts suchen
?
Schlüssel.
Um sich auf den Prozess einzulassen, an dem Sie interessiert sind, leiten Sie die Ausgabe von weiter
ps
durch
Griff
und geben Sie den Namen oder einen Teil des Namens des Prozesses an.
ps -e | Griffverschluss
Wenn Sie die PID des Prozesses gefunden haben, den Sie beenden möchten, übergeben Sie sie an
töten
Befehl als Parameter. So beenden Sie die
Verschluss
Prozess, der durch den vorherigen Befehl identifiziert wurde, verwenden Sie diesen Befehl:
töte 2099
Das
töten
Befehl ist ein stiller Attentäter - er gibt Ihnen kein Feedback, wenn er erfolgreich war.
Der pkill-Befehl
Das
pkill
Mit dem Befehl können Sie einen oder mehrere Prozesse nach Namen beenden. Sie müssen den Prozess nicht anhand der PID identifizieren. Benutzen
pkill
Sie geben einen Suchbegriff an, der
pkill
wird verwendet, um die Liste der ausgeführten Prozesse zu überprüfen. Matching-Prozesse werden beendet. Sie müssen also sicher sein, dass der Suchbegriff richtig geschrieben ist.
Als Sicherheitsnetz können Sie das verwenden
pgrep
Befehl
Vor
Sie verwenden die
pkill
Befehl. Das
pgrep
Befehl akzeptiert auch einen Suchbegriff. Es wird die PID jedes Prozesses aufgelistet, die dem Suchbegriff entspricht. Das ist sicher, weil
pgrep
gibt kein Kill-Signal an die Prozesse aus, und wenn Sie den Suchbegriff falsch eingeben, wird kein anderer Prozess versehentlich beendet. Sie können sicherstellen, dass der Suchbegriff richtig durchdacht ist, bevor Sie ihn weitergeben
pkill
. Beide
pkill
und
pgrep
Behandeln Sie den Suchbegriff genauso. Ihre Behandlung ist so ähnlich, dass sie
Teilen Sie die gleiche Manpage
.
Nehmen wir an, es gibt einen Prozess mit dem Namen "subq". Wir werden das verwenden
ps -u dave | grep
Befehl, einen Blick hinter den Vorhang zu werfen. Sie können sehen, dass "subq" nur diesem Prozess und diesem Prozess entspricht. Das war nur so, dass Sie den vollständigen Namen des Prozesses sehen können.
ps -u dave | grep subq
Nehmen wir unseren Benutzer an
hat nicht
Habe das gemacht; Alles, was sie wissen, ist, dass der Prozessname den Teilstring "subq." enthält. Sie benutzen
pgrep
um zu überprüfen, ob es nur eine Übereinstimmung mit dem Suchbegriff gibt. Sie verwenden dann diesen Suchbegriff mit
pkill
.
pgrep subq
pkill subq
Sie können verwenden
pkill
mehrere Prozesse gleichzeitig zu beenden. Hier läuft der Benutzer
pgrep
um zu überprüfen, wie viele Prozesse Chrome gestartet hat. Sie benutzen
pkill
um sie alle zu töten. Sie überprüfen dann mit
pgrep
dass sie alle entfernt wurden.
pgrep chrom
pkill chrom
pgrep chrom
Wenn mehrere Prozesse mit demselben Namen ausgeführt werden, Sie jedoch nicht alle beenden möchten, können Sie verwenden
pgrep
mit dem
-f
(Befehlszeilen-) Option, um zu identifizieren, welcher Prozess welcher ist. Ein einfaches Beispiel wären zwei
Klingeln
Prozesse. Du willst einen von ihnen töten, aber nicht den anderen. Sie können ihre Befehlszeilen verwenden, um zwischen ihnen 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
Der Killall-Befehl
Warnung
: In den Betriebssystemen Solaris und OpenIndiana die
töte alle
Befehl wird
töte alle Prozesse, die dir gehören
. Wenn sind root oder wenn Sie ausgestellt haben
Sudo Killall
Sie werden Ihren Computer neu starten! Während der Recherche für diesen Artikel wurde dieses Verhalten mit der neuesten Version von OpenIndiana Hipster 2018.10 bestätigt.
Das
töte alle
Befehl
arbeitet in ähnlicher Weise
zum
pkill
Befehl, aber mit einem bestimmten Unterschied. Anstatt einen Suchbegriff an den Befehl zu übergeben, müssen Sie den genauen Prozessnamen angeben.
Sie können keine teilweise Übereinstimmung mit einem Prozessnamen angeben. Sie müssen den gesamten Prozessnamen wie folgt angeben:
Killall Shutt
Killall Shutter
Das
-Y
Mit der Option (jünger als) können Sie Prozesse beenden, für die ausgeführt wurde
weniger
als ein bestimmter Zeitraum. Der Zeitraum wird in Zahlen angegeben, gefolgt von einer dieser Einheiten:
- s (Sekunden)
- m (Minuten)
- h (Stunden)
- d (Tage)
- w (Wochen)
- M (Monate, Anmerkung, Großbuchstabe „M“)
- y (Jahre)
Um einen aufgerufenen Prozess zu beenden
Mutter
das wurde gerade gestartet und lässt alle älteren Instanzen von
Mutter
Beim Ausführen können Sie die folgenden Parameter mit verwenden
töte alle
, wenn Sie innerhalb von zwei Minuten reagiert haben:
Vermindere mich oder mich
Das
-Das
Mit der Option (älter als) können Sie Prozesse beenden, die länger als einen bestimmten Zeitraum ausgeführt wurden. Dieser Befehl wird alle töten
ssh
Verbindungen, die länger als einen Tag laufen:
killall -o 1d sshd
Sei nicht zu glücklich
Mit diesen Befehlen können Sie fehlerhafte Prozesse korrekt und sicher identifizieren und beenden.
Sei immer vorsichtig. Stellen Sie zunächst sicher, dass der Prozess, den Sie beenden möchten, wirklich der gewünschte ist. Zweitens: Überprüfen Sie dies noch einmal - seien Sie vorsichtig und stellen Sie sicher, dass der Zielprozess derjenige ist, den Sie beenden möchten. Fahren Sie mit dem Beenden des Vorgangs fort, sobald Sie zufrieden sind.