Master Linux Kill-Prozess mit ps, pgrep, pkill und mehr

Die Verwaltung von Prozessen in Linux kann für einen neuen Systemadministrator (Sysadmin) zunächst einschüchternd wirken. Aber mit etwas Erklärung und Demonstration wirst du lernen, wie du Linux-Prozesse finden und beenden kannst, indem du Befehlszeilentools wie ps und kill verwendest.

In diesem Artikel lernst du Befehle zum Auffinden laufender und fehlerhafter Prozesse, zum Beenden (Terminieren) laufender Prozesse, zum Auffinden von Hintergrundprozessen und vielem mehr auf jedem Linux-Betriebssystem.

Am Ende des Artikels wirst du Prozesse basierend auf Prozessidentifikationsnummern (PIDs) von der Befehlszeile aus wie ein Linux-Profi verwalten können. Lies weiter, um alles über Prozessverwaltungsbefehle in Linux zu erfahren!

Voraussetzungen

In diesem Artikel wird erklärt, wie man Prozesse in Linux verwaltet. Wenn du praktisch mitmachen möchtest, benötigst du Folgendes:

  • A Linux host, which can be a virtual machine or a physical machine.
  • Um die PowerShell-Beispiele auszuprobieren, installiere PowerShell 7.1.1 auf einem Linux-Host.
  • A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.

Die Linux-Distribution, die du verwenden möchtest, liegt bei dir. Dieser Artikel basiert auf Ubuntu 20.04 LTS. Die Befehle sind jedoch standardmäßig für das Linux-Betriebssystem.

Bereit, loszulegen? Gut, dann tauchen wir ein.

Prozessverwaltung in Linux

Gelegentlich kann es vorkommen, dass Sie auf einem Linux-System einen laufenden Prozess beenden müssen. Zum Beispiel könnte ein Bash-Skript geplant sein, das zu bestimmten Zeiten ausgeführt wird. Dieses Bash-Skript ist so konfiguriert, dass es über einen Cron-Job (Linux-Prozessplaner) als ein anderer Benutzer ausgeführt wird.

Manchmal erzeugt dieses Skript fehlerhafte Prozesse, die das Skript scheitern lassen können. Wie können Sie diese fehlerhaften Prozesse beenden, ohne das System neu zu starten oder das Skript zu stoppen?

In den nächsten Abschnitten werden Befehle zum Auffinden und Beenden oder Beenden von Prozessen auf einem Linux-System behandelt. Jeder Abschnitt baut auf dem vorherigen auf. Sie werden die Befehle ps, top, pgrep, kill und pkill kennenlernen, die alle in Linux nativ vorhanden sind.

Als Bonus sind auch äquivalente PowerShell-Befehle Get-Process und Stop-Process enthalten, falls Ihnen die nativen Linux-Befehle nicht zusagen.

Tools zum Auffinden von Prozessen

Bevor Sie einen Prozess beenden können, müssen Sie den richtigen Prozess ausfindig machen. Die eindeutige PID ermöglicht eine präzise Zielauswahl. Lesen Sie weiter, um zu erfahren, wie Sie die richtigen Prozesse zum Beenden finden können.

Verwendung des Befehls ps zur Anzeige von Prozessinformationen

Der Befehl Prozessstatus oder ps zeigt Informationen zu aktiven Prozessen auf einem Linux-System an. Mit ps können Sie einen laufenden Prozess finden und sogar Hintergrundprozesse.

Der Befehl ps zeigt standardmäßig alle Prozesse für die effektive Benutzerkennung (EUID) des aktuellen Benutzers an. Wenn Sie den Befehl ps wie unten gezeigt ausführen, werden alle laufenden Prozesse zurückgegeben, die Ihr Benutzer beenden kann.

ps
Displaying processes matching the EUID (effective user ID) for the user bkindle.

Erweiterte Prozessinformationen mit dem Befehl top finden

Was ist, wenn Sie ständig aktualisierte Informationen zu laufenden Prozessen und Systemmetriken finden möchten? In diesem Fall können Sie den Befehl top verwenden. Im Gegensatz zu ps aktualisiert der Befehl top die Prozessinformationen auf dem Bildschirm in festgelegten Intervallen.

Wenn Sie den Befehl top ausführen, sehen Sie mehr als nur eine PID. Neben Prozessdetails werden CPU- und Speicherprozentsätze, Nice-Werte (CPU-Zeitplanung Prozesspriorität) und die vom Linux-Kernel festgelegte Prozesspriorität (PR) angezeigt.

Für einen neuen oder erfahrenen Systemadministrator ist der Befehl top oft das Hauptwerkzeug zur Verwaltung wichtiger Systemressourcen und Prozesse. Wie unten gezeigt, zeigt die Ausgabe des Befehls top mehr Prozessinformationen als der Befehl ps, einschließlich allgemeiner Systemmetriken.

The top command on Ubuntu Desktop 20.04 LTS showing all running PID’s.

htop ist eine verbesserte Variante von top, die verschiedene Verbesserungen enthält, wie z.B. eine farbige Terminalausgabe.

Angenommen, Sie möchten den Speicher oder die CPU-Ressourcen eines Prozesses überprüfen. In diesem Fall können Sie den p-Schalter von top verwenden, wie unten gezeigt.

top -p 2113
The top command displaying information on only one PID, 2113.

Vielleicht müssen Sie alle laufenden Prozesse für einen bestimmten Benutzernamen anzeigen. Der Befehl top bietet den u-Schalter, um nur die Prozesse eines bestimmten Benutzers anzuzeigen. Wie im folgenden Beispiel gezeigt, werden nur PIDs angezeigt, die der Benutzer-ID bkindle entsprechen.

top -u bkindle
The top command displaying only processes for the user bkindle.

Suchen nach bestimmten Prozess-PIDs mit dem Befehl pgrep

Ursprünglich ein Solaris-Befehl, wurde pgrep für die Verwendung mit Linux portiert. Durch die Kombination der Suchfunktion des Befehls grep und der Prozessverwaltung von ps bietet pgrep Flexibilität beim Auffinden des genauen zu zielenden Prozesses.

Obwohl ps mehr Informationen anzeigt, ist pgrep darauf ausgelegt, nur die PID der zurückgegebenen Prozesse zurückzugeben. pgrep hilft beim Auffinden des Prozesses mithilfe der vielen verfügbaren Suchparameter. Im folgenden Beispiel wird gezeigt, wie pgrep nach einem beliebigen Prozess sucht, der vmtoolsd entspricht.

pgrep vmtoolsd
Using pgrep to obtain all PIDs associated with vmtoolsd.

Geben Sie mit dem u-Schalter eine Benutzer-ID an, um nur Prozesse abzurufen, die mit diesem bestimmten Benutzer verbunden sind. Wie unten gezeigt wird, wird nur eine einzige PID für den Benutzer bkindle und den Prozess vmtoolsd zurückgegeben.

pgrep -u bkindle vmtoolsd
Retrieving the specific PID for the vmtoolsd process associated with the user bkindle.

Auffinden von Prozessen mit PowerShell’s Get-Process unter Linux

Normale Linux-Befehle funktionieren gut, aber wussten Sie, dass PowerShell auch Linux-Prozesse verwalten kann? Das Cmdlet Get-Process funktioniert ähnlich wie der Linux-Befehl ps und liefert Informationen zu Prozessen. Möglicherweise müssen Sie beispielsweise alle laufenden Prozesse des aktuellen Benutzers bkindle finden. Wie unten gezeigt, finden Sie alle PIDs (mit Get-Process als ID bezeichnet) des Benutzers bkindle.

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'
Retrieving Linux PID’s with PowerShell’s Get-Process cmdlet.

Verwandt: Wie man PowerShell Where-Object verwendet, um alles zu filtern

Nachdem Sie gelernt haben, wie Sie verschiedene Prozesse lokalisieren können, lesen Sie weiter, um alle Möglichkeiten zur Beendigung oder Beendigung eines Prozesses in Linux zu entdecken!

Beenden von Prozessen mit den Kill-Befehlen in Linux

In den vorherigen Abschnitten haben Sie gelernt, wie Sie die PID des Prozesses ermitteln, an den Sie ein Beendigungssignal senden möchten, indem Sie native Linux- und PowerShell-Befehle verwenden. In den nächsten Abschnitten wird erklärt, wie Sie die Programme kill und pkill, ihre zugehörigen Signale und Befehlszeilenschalter verwenden.

Linux-Signale und Prozessverwaltung

Signale sind die Methode, die Linux verwendet, um mit Prozessen zu kommunizieren, die im Betriebssystem ausgeführt werden. Die drei Hauptsignale, die der Befehl kill verwendet, um Prozesse zu beenden, sind:

  • 1 (SIGHUP) – Beendet interaktive Programme und veranlasst Daemons (Hintergrunddienste), die Konfigurationsdateien erneut zu lesen, die der Prozess verwendet.
  • 9 (SIGKILL) – Zwingt den Prozess zum Beenden, ohne die Aufgaben eines ordnungsgemäßen Herunterfahrens auszuführen.
  • 15 (SIGTERM) – Ermöglicht einem Prozess ein ordnungsgemäßes Beenden, z. B. das Schließen von geöffneten Dateien bei Beendigung. Dies ist das Standard-Signal, das verwendet wird, wenn keine Nummer angegeben wird, wenn der Kill-Befehl verwendet wird.

In diesem Artikel werden nur die drei Hauptsignale behandelt, die zum Beenden von Prozessen verwendet werden. Es gibt insgesamt 64 verfügbare Signale. Verwenden Sie kill -l, um die Liste der Signale und ihre entsprechende Nummer zu erhalten.

Great video on understanding process signals

Jetzt, da Sie die drei Hauptsignale zum Beenden eines Prozesses verstehen, erfahren Sie in den nächsten Abschnitten, wie Sie einen Prozess beenden können.

Verwenden des kill-Befehls zum Beenden eines Prozesses

In diesem nächsten Beispiel verwenden Sie den kill-Befehl. Stellen Sie sich für einen Moment vor, dass Sie eine PowerShell-Instanz mit dem Namen pwsh ausführen und die zugewiesene PID 22687 ist. Eine Möglichkeit, diesen Prozess zu beenden, wird unten gezeigt.

  1. Verwenden Sie pgrep pwsh, um die PID für den Prozess pwsh zu ermitteln, die im kill-Befehl verwendet wird.
  2. Verwenden Sie kill -s TERM 22687, um den pwsh-Prozess ordnungsgemäß zu beenden. Der Befehl TERM entspricht dem Signal 15 (SIGTERM) und wird mit dem Parameter s des Befehls kill angegeben.
  3. Verwenden Sie top, ps oder pgrep, um den PID zu überprüfen und sicherzustellen, dass er nicht mehr aufgeführt ist.

Hier ist ein Beispiel für den oben genannten Vorgang von einem Ubuntu 20.04 LTS Bash-Terminal:

Using kill and associated commands to terminate the pwsh process.

Der Befehl killall beendet alle Prozesse anhand eines Namens anstelle der PID und kann ziemlich zerstörerisch sein, wenn er unvorsichtig verwendet wird. Wenn Sie sich jedoch für die Verwendung dieses Befehls entscheiden, verwenden Sie die Option i, um den Befehl um Bestätigung zu bitten.

Prozesse nach Namen mit dem Befehl pkill beenden

Sie haben möglicherweise bemerkt, dass der Befehl kill nur mit Prozess-IDs funktioniert. Dies kann das Beenden eines Prozesses zu einem komplizierten mehrstufigen Vorgang machen. Der Befehl pkill, der in den Paketen procps und procps-ng enthalten ist, beendet einen Prozess anhand eines gesuchten Namens.

Funktional wirkt der Befehl pkill als Wrapper um das Programm pgrep. Der Befehl pkill sendet anstelle der Auflistung der PIDs im Terminal ein spezifiziertes Signal an jeden gefundenen Prozess. pkill unterscheidet sich von kill darin, dass pkill nur den Namen eines Prozesses verwenden kann, nicht jedoch die PID.

Standardmäßig ist der Befehl pkill in Ubuntu 20.04 LTS nicht verfügbar. Sie müssen die Anwendung herunterladen und installieren. Führen Sie dazu den Befehl sudo apt install mcollective-plugins-process -y aus.

Um einen Prozess mit dem Befehl pkill zu beenden, führen Sie die folgenden Schritte aus:

  1. Verwenden Sie ps, um zu überprüfen, ob die Nano-Anwendung (ein textbasierter Editor) derzeit läuft. Dieser Schritt ist optional, dient jedoch als Sicherheitsüberprüfung vor dem Beenden eines Prozesses.
  2. Verwenden Sie pkill -9 nano, um die Nano-Anwendung gewaltsam zu beenden.

Im Folgenden finden Sie ein Beispiel für den oben beschriebenen Prozess in einem Ubuntu 20.04 LTS Bash-Terminal.

Using the pkill command to forcefully terminate the nano process.

Einen Prozess mit dem Befehl top beenden

Wenn Sie den Befehl top ausführen, um laufende Prozesse anzuzeigen, können Sie einen bestimmten Prozess mit der k-Taste beenden. Es wird eine interaktive Aufforderung angezeigt, in der Sie die PID des zu beendenden Prozesses angeben müssen.

Wie unten gezeigt, führen Sie den Befehl top aus und drücken k. Geben Sie die PID ein, die Sie beenden möchten, und drücken Sie die Eingabetaste, um die PID sofort zu beenden.

Use top to specify a process to terminate using the k keystroke.

Lernen Sie als nächstes eine weitere Alternative zu nativen Linux-Befehlen mit dem PowerShell-Befehl Stop-Process kennen!

Verwenden des PowerShell-Befehls Stop-Process zum Beenden eines Prozesses

Wenn Ihnen die nativen Linux-Befehle nicht zusagen, können Sie auf PowerShell zurückgreifen! Genau wie mit dem kill-Befehl können Sie Prozesse mit dem Stop-Process-Cmdlet in Linux beenden. Gehen Sie erneut davon aus, dass Sie einen PowerShell-Prozess pwsh ausführen.

  1. Suchen Sie die PID mit Get-Process -ProcessName 'pwsh' und notieren Sie die PIDs zum Beenden.
  2. Verwenden Sie Stop-Process -Id 29992,30014, um die zurückgegebenen mehreren Prozesse zu beenden.
  3. Verwenden Sie Get-Process -ProcessName 'pwsh' und überprüfen Sie die PIDs. Die PIDs 29992 und 30014 werden nicht mehr aufgelistet, was bedeutet, dass sie beendet wurden.

Sie können auch Get-Process und die kill-Methode verwenden, um einen oder mehrere Prozesse zu beenden: (Get-Process -Id [PID]).Kill() oder (Get-Process -Id [PID1,2,3,4]).Kill().

Vorsicht beim Verwenden des ProcessName-Parameters. Die Verwendung dieses Parameters verhält sich ähnlich wie der killall-Befehl und beendet alle Prozesse, die den angegebenen Namen entsprechen.

Hier ist ein Beispiel für den obigen Prozess aus einem Ubuntu 20.04 LTS Bash-Terminal.

Using PowerShell, Stop-Process to kill processes in Linux.

Nächste Schritte

Sie sollten jetzt die verschiedenen Möglichkeiten kennen, um Prozesse in Linux zu finden und zu beenden! Für Ihre nächste Herausforderung sollten Sie versuchen, Prozesse über SSH-Verbindungen remote zu beenden oder Prozesse zu beenden, die möglicherweise in Containern ausgeführt werden.

Verwandt: Ein Windows-Typ in einer Linux-Welt: Einrichten von SSH in Linux

Source:
https://adamtheautomator.com/linux-kill-process/