GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Meistern Sie den Linux-Kill-Prozess mit ps, pgrep, pkill und mehr

Die Verwaltung von Prozessen unter Linux kann einem neuen Systemadministrator (sysadmin) zunächst entmutigend erscheinen. Aber mit einer kleinen Erklärung und Demonstration erfahren Sie, wie Sie Linux-Kill-Prozesse finden und ausführen können, indem Sie einfach Befehlszeilentools wie ps verwenden und kill .

In diesem Artikel lernen Sie Befehle zum Auffinden laufender und fehlerhafter Prozesse, zum Beenden (Beenden) laufender Prozesse, zum Auffinden von Hintergrundprozessen und vieles mehr auf jedem Linux-Betriebssystem kennen.

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

Voraussetzungen

Dieser Artikel wird eine exemplarische Vorgehensweise zum Verwalten von Prozessen in Linux sein. Wenn Sie selbst aktiv werden möchten, benötigen Sie Folgendes:

  • Ein Linux-Host, der eine virtuelle Maschine oder eine physische Maschine sein kann.
  • Um die PowerShell-Beispiele auszuprobieren, installieren Sie PowerShell 7.1.1 auf einem Linux-Host.
  • Ein Nicht-Root-Benutzerkonto. Während Root-Zugriff nicht erforderlich ist, wird es ein Beispiel geben, bei dem der Root-Benutzer den laufenden Prozess eines anderen Benutzers beenden kann.

Welche Linux-Distribution Sie verwenden möchten, liegt ganz bei Ihnen. Dieser Artikel basiert auf Ubuntu 20.04 LTS. Die Befehle sind jedoch Standard für das Betriebssystem Linux.

Bereit anzufangen? Gut, lass uns eintauchen.

Prozesse unter Linux verwalten

Gelegentlich können Sie auf ein Szenario stoßen, in dem Sie einen laufenden Prozess auf einem Linux-System stoppen müssen. Beispielsweise haben Sie möglicherweise ein Bash-Skript, das nach einem Zeitplan ausgeführt wird. Dieses Bash-Skript ist so konfiguriert, dass es als ein anderer Benutzer über ein cron ausgeführt wird job (Linux-Prozessplaner).

Manchmal erzeugt dieses Skript fehlerhafte Prozesse, die dazu führen können, dass das Skript fehlschlägt. Wie beenden Sie diese fehlerhaften Prozesse, ohne das System neu zu starten oder das Skript zu stoppen?

In den nächsten Abschnitten werden Sie die Befehle durchgehen, die zum Lokalisieren und Beenden oder Kill verwendet werden Prozesse auf einem Linux-System. Jeder Abschnitt baut auf dem letzten auf. Sie lernen etwas über ps , top , pgrep , kill , und pkill Befehle alle nativ für Linux.

Als Bonus befiehlt das PowerShell-Äquivalent Get-Process und Stop-Process sind enthalten, wenn native Linux-Befehle nicht Ihr Stil sind.

Tools zum Lokalisieren von Prozessen

Bevor Sie einen Prozess beenden, müssen Sie den richtigen Zielprozess finden. Die einzigartige PID ermöglicht ein präzises Targeting. Lesen Sie weiter, um zu erfahren, wie Sie die richtigen Prozesse für die Beendigung finden.

Verwendung von ps Befehl zum Anzeigen von Prozessinformationen

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

Der Befehl ps zeigt standardmäßig alle Prozesse für die effektive Benutzeridentifikation an (EUID) des aktuellen Benutzers. Ausführen von ps Befehl, wie unten gezeigt, gibt jeden laufenden Prozess zurück, den Ihr Benutzer beenden kann.

ps

Suchen von erweiterten Prozessinformationen mithilfe von top Befehl

Wenn Sie ständig aktualisierte Informationen zu laufenden Prozessen und Systemmetriken finden möchten, können Sie in diesem Fall den top verwenden Befehl. Im Gegensatz zu ps , die top Der Befehl aktualisiert die Prozessinformationen auf dem Bildschirm über ein festgelegtes Intervall.

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

Für einen neuen oder erfahrenen Systemadministrator ist die top command ist oft das primäre Tool zur Verwaltung wichtiger Systemressourcen und -prozesse. Wie unten gezeigt, der top Die Befehlsausgabe zeigt mehr Prozessinformationen an als ps Befehl einschließlich Gesamtsystemmetriken.

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

Angenommen, Sie möchten den Arbeitsspeicher oder die CPU-Ressourcen untersuchen, die ein Prozess verbraucht. In diesem Fall können Sie den p verwenden Schalter von top wie unten gezeigt.

top -p 2113

Vielleicht müssen Sie alle laufenden Prozesse für einen bestimmten Benutzernamen anzeigen. Der top Befehl bietet den u umschalten, um nur die Prozesse eines bestimmten Benutzers anzuzeigen. Wie im Beispiel unten zu sehen, stimmen PIDs nur mit der Benutzer-ID bkindle überein angezeigt.

top -u bkindle

Suchen bestimmter Prozess-PIDs mit pgrep Befehl

Ursprünglich ein Solaris-Befehl, pgrep wurde für die Verwendung mit Linux portiert. Kombination der Suchleistung von grep Befehl und die Prozessverwaltung von ps , pgrep bietet Flexibilität bei der Suche nach dem genauen Zielprozess.

Obwohl ps zeigt weitere Informationen an, pgrep ist 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 pgrep wird angezeigt, wenn nach einem Prozess gesucht wird, der mit vmtoolsd übereinstimmt .

pgrep vmtoolsd

Geben Sie in ähnlicher Weise eine Benutzer-ID mit dem u an wechseln, um nur Prozesse abzurufen, die diesem bestimmten Benutzer zugeordnet sind. Wie unten gezeigt, wird für den Benutzer bkindle nur eine einzige PID zurückgegeben und der vmtoolsd verarbeiten.

pgrep -u bkindle vmtoolsd

Suchen von Prozessen mit Get-Process von PowerShell unter Linux

Typische Linux-Befehle funktionieren hervorragend, aber wussten Sie, dass PowerShell auch Linux-Prozesse verwalten kann? Der Get-Process Cmdlet funktioniert ähnlich wie das Linux ps Befehl und gibt Prozessinformationen zurück. Vielleicht müssen Sie zum Beispiel alle laufenden Prozesse des aktuellen Benutzers bkindle finden . Finden Sie, wie unten gezeigt, alle PIDs (gekennzeichnet als ID mit Get-Process ) des Benutzers bkindle .

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'

Verwandt:So verwenden Sie PowerShell Where-Object, um alle Dinge zu filtern

Nachdem Sie gelernt haben, wie man verschiedene Prozesse findet, lesen Sie weiter, um alle Möglichkeiten zu entdecken, einen Prozess unter Linux zu beenden oder zu beenden!

Killing-Prozesse mit den Kill-Befehlen in Linux

In den vorherigen Abschnitten haben Sie gelernt, wie Sie die PID des Prozesses finden, an den Sie ein Kill-Signal senden möchten, indem Sie native Linux- und PowerShell-Befehle verwenden. In den nächsten Abschnitten wird erklärt, wie man kill verwendet und pkill Programmen, den zugehörigen Signalen und Befehlszeilenschaltern.

Linux-Signale und Prozessmanagement

Signale sind die Methode, die Linux verwendet, um mit Prozessen zu kommunizieren, die im Betriebssystem ausgeführt werden. Die drei primären Signale, die kill Befehle zum Beenden von Prozessen sind:

  • 1 (SIGHUP) – Beendet interaktive Programme und veranlasst Daemons (Hintergrunddienste), die vom Prozess verwendeten Konfigurationsdateien erneut zu lesen.
  • 9 (SIGKILL) – Erzwingt das Beenden des Prozesses, ohne ordnungsgemäße Aufgaben zum Herunterfahren auszuführen.
  • 15 (SIGTERM) – Ermöglicht das ordnungsgemäße Beenden eines Prozesses, z. B. das Schließen geöffneter Dateien nach Abschluss. Dies ist das Standardsignal, das verwendet wird, wenn bei der Verwendung des Kill-Befehls keine Nummer angegeben wird.

Obwohl sich dieser Artikel nur auf die drei Hauptsignale konzentriert, die für Tötungsprozesse verwendet werden, gibt es insgesamt 64 verfügbare Signale. Verwenden Sie kill -l um die Liste der Signale und ihre entsprechende Nummer zu erhalten.

Nachdem Sie nun die drei Hauptsignale zum Beenden eines Prozesses verstanden haben, erfahren Sie in den nächsten Abschnitten, wie Sie einen Prozess beenden.

Verwendung von kill Befehl 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 ist 22687. 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 , verwendet in kill Befehl.
  2. Verwenden Sie kill -s TERM 22687 um pwsh zu beenden elegant verarbeiten. Der TERM Der Befehl wird dem Signal 15 (SIGTERM) zugeordnet und mit s angegeben Parameter des kill Befehl.
  3. Verwenden Sie top Ihrer Wahl , ps , oder pgrep um zu überprüfen, ob die PID nicht mehr aufgeführt ist.

Unten ist ein Beispiel für den obigen Prozess von einem Ubuntu 20.04 LTS-Bash-Terminal gezeigt.

Der killall Der Befehl beendet alle Prozesse basierend auf einem Namen anstelle von PID, was diesen Befehl ziemlich destruktiv machen kann, wenn er nachlässig verwendet wird. Wenn Sie sich jedoch für diesen Befehl entscheiden, verwenden Sie den i Option, damit der Befehl nach einer Bestätigung fragt.

Killing-Prozesse nach Namen mit pkill

Sie haben vielleicht bemerkt, dass der kill Der Befehl funktioniert nur mit Prozess-IDs. Dies kann das Beenden eines Prozesses zu einem komplizierten mehrstufigen Prozess machen. Der pkill Befehl, der in procps und procps-ng enthalten ist Pakete, beendet einen Prozess basierend auf einem gesuchten Namen.

Funktional der pkill Der Befehl fungiert als Wrapper um den pgrep Programm. Die pkill Der Befehl sendet ein bestimmtes Signal an jeden gefundenen Prozess, anstatt nur die PIDs im Terminal aufzulisten. pkill unterscheidet sich von kill darin pkill kann nur den Namen eines Prozesses verwenden, nicht die PID.

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

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

  1. Verwenden Sie ps um zu überprüfen, ob die Nano-Anwendung (ein Befehlszeilen-Texteditor) derzeit ausgeführt wird. Dieser Schritt ist optional, aber eine Sicherheitsüberprüfung, bevor ein Prozess beendet wird.
  2. Verwenden Sie pkill -9 nano um die Nano-Anwendung zwangsweise zu beenden.

Unten ist ein Beispiel für den obigen Prozess von einem Ubuntu 20.04 LTS-Bash-Terminal gezeigt.

Killing a Process with the Top Befehl

Wenn Sie top ausführen Befehl zum Anzeigen laufender Prozesse können Sie einen bestimmten Prozess mit dem k beenden Tastenanschlag. Sie werden eine interaktive Eingabeaufforderung sehen, die Sie nach der PID eines zu beendenden Prozesses fragt.

Führen Sie wie unten gezeigt top aus Befehl und drücken Sie k. Geben Sie die PID ein, die Sie löschen möchten, und drücken Sie die Eingabetaste Taste, um die PID sofort zu beenden.

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

Verwendung von PowerShell Stop-Process Befehl zum Beenden eines Prozesses

Wenn native Linux-Befehle nicht Ihr Stil sind, ist PowerShell genau das Richtige für Sie! Genau wie beim kill Befehl können Sie Prozesse mit dem Stop-Process beenden Cmdlets unter Linux. Stellen Sie sich erneut vor, Sie würden eine PowerShell pwsh ausführen verarbeiten.

  1. Suchen Sie die PID mit Get-Process -ProcessName 'pwsh' und notieren Sie sich die zu beendenden PIDs.
  2. Verwenden Sie Stop-Process -Id 29992,30014 um die mehrfach zurückgegebenen Prozesse zu beenden.
  3. Verwenden Sie Get-Process -ProcessName 'pwsh' und überprüfen Sie die PIDs, 29992 und 30014 sind nicht mehr aufgeführt, d.h. sie wurden gekündigt.

Sie können auch Get-Process verwenden und die kill Methode zum Beenden eines oder mehrerer Prozesse:(Get-Process -Id [PID]).Kill() oder (Get-Process -Id [PID1,2,3,4]).Kill() .

Seien Sie vorsichtig bei der Verwendung von ProcessName Parameter. Die Verwendung dieses Parameters verhält sich ähnlich wie killall Befehl und wird alle Prozesse beenden passend zu den angegebenen Namen.

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

Nächste Schritte

Sie sollten jetzt die vielen Möglichkeiten kennen, Prozesse in Linux zu finden und zu beenden! Versuchen Sie als nächste Herausforderung, Prozesse remote über SSH-Verbindungen 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 unter Linux


Linux
  1. So finden und töten Sie den Zombie-Prozess in Linux

  2. Der Unterschied zwischen Kill, Pkill und Killall?

  3. Linux:Finde und töte Zombie-Prozesse

  4. Linux-Skript zum Beenden des Java-Prozesses

  5. So beenden Sie alle von pgrep zurückgegebenen Prozesse

So beenden Sie Zombie-Prozesse in Linux

Fkill – Interaktives Suchen und Beenden von Prozessen unter Linux

So finden und beenden Sie laufende Prozesse in Linux

So finden und beenden Sie einen Prozess mit einem Linux-Terminal

Prozessüberwachung unter Linux

So beenden Sie Prozesse in Linux mit kill, killall und pkill