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.
- Verwenden Sie
pgrep pwsh
um die PID für den Prozesspwsh
zu ermitteln , verwendet inkill
Befehl. - Verwenden Sie
kill -s TERM 22687
umpwsh
zu beenden elegant verarbeiten. DerTERM
Der Befehl wird dem Signal 15 (SIGTERM) zugeordnet und mits
angegeben Parameter deskill
Befehl. - Verwenden Sie
top
Ihrer Wahl ,ps
, oderpgrep
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 deni
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 dazusudo apt install mcollective-plugins-process -y
aus .
Um einen Prozess mit pkill
zu beenden , führen Sie die folgenden Schritte aus:
- 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. - 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.
- Suchen Sie die PID mit
Get-Process -ProcessName 'pwsh'
und notieren Sie sich die zu beendenden PIDs. - Verwenden Sie
Stop-Process -Id 29992,30014
um die mehrfach zurückgegebenen Prozesse zu beenden. - Verwenden Sie
Get-Process -ProcessName 'pwsh'
und überprüfen Sie die PIDs,29992
und30014
sind nicht mehr aufgeführt, d.h. sie wurden gekündigt.
Sie können auch
Get-Process
verwenden und diekill
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 wiekillall
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