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

So beenden oder beenden Sie einen Linux-Prozess:Der ultimative Leitfaden

Multiprocessing-Betriebssysteme wie Linux und BSDs verwenden mehrere Methoden zur Maximierung der CPU-Auslastung. Ein Prozess ist einfach ein Programm in Ausführung. Da zu einem bestimmten Zeitpunkt mehr als ein Linux-Prozess ausgeführt wird, ist das Prozessmanagement in Linux äußerst wichtig. Benutzer haben oft Probleme wie die Drosselung der CPU-Ressourcen, wenn sie zu viele Programme ausführen. Situationen wie diese entstehen, wenn die CPU die wachsende Anzahl von Prozessen nicht bewältigen kann. Obwohl dies nicht vollständig von der Leistung Ihrer CPU abhängt, kann der Umgang mit hängenden oder Zombie-Prozessen ziemlich frustrierend sein. Um Ihnen zu helfen, solche Vorkommnisse abzumildern, skizzieren wir einige Standardmethoden zum Beenden dieser Prozesse.

Meistern Sie das nicht reagierende Prozessmanagement in Linux

Sie lernen mehrere Möglichkeiten kennen, einen Linux-Prozess zu beenden, der überhaupt nicht reagiert. Wenn Sie von Windows kommen, sind Sie vielleicht mit Strg+Alt+Entf vertraut. In ähnlicher Weise haben Mac-Benutzer die Methode Command+Option+Escape, um eingefrorene Prozesse zu beenden. Linux ist viel vielseitiger als seine Pendants und bietet mehr als eine Methode, um mit toten/nicht reagierenden Prozessen fertig zu werden.

Verschiedene Methoden zum Beenden eines toten Linux-Prozesses

Wir werden hauptsächlich zwei Methoden zum Töten von Zombie-Prozessen skizzieren. Wir verwenden das Linux-Terminal für die erste Methode. Dazu müssen wir zunächst die Prozess-ID identifizieren. Nach erfolgreichem Erhalt können wir diese PID verwenden, um das Programm zu beenden, indem wir bestimmte Signale an diese PID senden.

Sie erfahren auch, wie Sie solche Linux-Kill-Jobs über die grafische Benutzeroberfläche oder das X-Fenster ausführen. Wir werden den „System Monitor“ nutzen Anwendung, die dafür in Ubuntu verfügbar ist. Obwohl dies eine GNOME-Anwendung ist, sind ähnliche Tools für andere Linux-Desktopumgebungen verfügbar.

Beenden Sie einen nicht reagierenden Prozess über die Befehlszeile

Es gibt mehrere Tools zum Beenden eines nicht reagierenden oder hängenden Prozesses über die Befehlszeile, einschließlich kill , pkill und killall . Diese Befehle funktionieren, indem sie bestimmte Signale an diese nicht reagierenden Prozesse senden. Sie benötigen die Prozess-ID oder PID Informationen, damit Sie ihnen das erforderliche Beendigungssignal senden können.

Die PID oder Prozess-ID ist eine eindeutige Nummer, die einen Prozess identifiziert. Diese werden vom Linux-Kernel zur Laufzeit erstellt und der Prozess-Scheduler steuert ihre CPU-Aktivitäten. Wenn Sie also eine Anwendung aufrufen, erzeugt der Kernel zuerst die erforderlichen Prozesse und weist ihnen diese eindeutigen PID-Werte zu. Einem Prozess können mehrere PIDs zugeordnet sein. Darüber hinaus hat jeder Prozess einen einzigen übergeordneten Prozess mit einer eindeutigen PPID (Parent Process ID).

Wenn Sie also diese PPID herausfinden können, können Sie mit Programmen, die für diesen Zweck entwickelt wurden, ein Kill-Signal senden. Im Folgenden erfahren Sie, wie Sie laufende Prozesse in Linux überprüfen und ihre PPID vom Terminal aus ermitteln.

Finden Sie die PPID-Informationen heraus

- -

Sie können die PPID eines Prozesses mit mehreren Prozessverwaltungsbefehlen in Linux ermitteln, z. B. pidof , pstree und pgrep . Lassen Sie uns sie einzeln untersuchen und sehen, wie man die PID eines Linux-Prozesses erhält.

Methode 1:Verwenden des ps-Befehls

Der Befehl ps in Linux zeigt alle laufenden Prozesse neben anderen prozessbezogenen Informationen wie der PID im Terminal an. Wir können diesen Befehl verwenden, um alle Prozesse aufzulisten und dann einen bestimmten Prozess herauszufiltern, indem wir Linux grep-Befehle verwenden. Es sollte uns die Prozess-ID-Informationen zeigen, an denen wir interessiert sind.

$ nano > /dev/null &
$ ps aux | grep "nano"

Zunächst haben wir im Hintergrund einen Linux-Texteditor aufgerufen. Dann haben wir den Befehl ps zusammen mit dem Befehl grep verwendet, um die PPID dieses Editors herauszufinden. Die Ausgabe kann mehrere Prozess-IDs enthalten, aber wir interessieren uns nur für die erste, da dies unsere PPID ist. Wir können auch den Linux-Befehl awk verwenden, um diese Informationen herauszufinden, wie unten gezeigt.

$ ps aux | awk '/nano/ {print $2}'

Dieser Befehl ist flexibler, da er alle irrelevanten Informationen unterdrückt. Es werden nur die PPID-Informationen angezeigt, nach denen wir suchen.

Methode 2:Verwenden des pstree-Befehls

Der Befehl pstree bietet uns eine baumartige Ansicht aller laufenden Prozesse. Es bietet eine grafische Ansicht der Linux-Aufgabenliste aus dem Terminalfenster. Mit diesem Befehl können Sie die PPID sowie alle PID-Informationen eines Prozesses anzeigen. Sehen Sie sich die folgenden Beispiele an, um zu erfahren, wie Sie pstree nutzen können, um die PPID eines bestimmten Prozesses zu finden.

$ nano > /dev/null &
$ pstree -p | grep 'nano'
$ pstree -p | awk '/nano/ {print $NF}'

Zuerst haben wir mit dem ersten Befehl einen Prozess im Hintergrund gestartet. Der zweite Befehl ruft dann die PPID dieses Prozesses mithilfe des grep-Befehls in Linux ab. Schließlich zeigt uns der dritte Befehl, wie wir diesen Wert mit dem awk-Befehl abrufen.

Methode 3:Verwenden des pgrep-Befehls

Der pgrep-Befehl ist einer der einfachsten Prozessverwaltungsbefehle in Linux. Es überprüft die Liste aller laufenden Prozesse und gibt die PPID eines bestimmten Prozesses in der Standardausgabe oder in unserem Fall im Terminal aus. Es funktioniert, indem es einen Regex-Abgleich durchführt, und eignet sich hervorragend zum Schreiben von Linux-Shell-Skripten.

$ nano > /dev/null &
$ pgrep 'nano'

Wir haben den Nanoprozess ähnlich wie in den früheren Beispielen hervorgebracht. Dann haben wir seine PPID mit dem Befehl pgrep erhalten. Sobald wir diesen Wert erhalten haben, können wir den Linux-Kill-Job sehr einfach ausführen.

Methode 4:Verwenden des pidof-Befehls

Der Befehl pidof ist eine weitere einfache, aber nützliche Möglichkeit, die PPID eines Linux-Prozesses zu ermitteln. Es zeigt sowohl die PPID als auch alle anderen PIDs an, die einem Prozess zugeordnet sind. Sehen Sie sich die folgende Untersuchung an, um zu sehen, wie Sie dies in der Praxis verwenden können.

$ nano > /dev/null &
$ pidof nano
$ pidof -s nano

Wenn Sie den Befehl pidof verwenden, um laufende Prozesse in Linux zu überprüfen, sehen Sie oft mehrere PIDs. Normalerweise ist in solchen Fällen die erste oder letzte Zahl die PPID, je nachdem, ob sie in aufsteigender oder in absteigender Reihenfolge sind. Sie können das -s verwenden Option von pidof, um dies zu mildern. Es wird nur der PPID-Wert angezeigt.

Methode 5:Verwenden des obersten Befehls

Der Befehl top bietet eine Echtzeitansicht aller laufenden Prozesse in Unix-ähnlichen Betriebssystemen. Sie können dies verwenden, um die Linux-Aufgabenliste in Ihrem Terminal anzuzeigen und die PID-Informationen eines bestimmten Prozesses herauszufinden.

$ top

Verwenden Sie die folgenden Befehle, um die PPID eines bestimmten Prozesses aus der Ausgabe des obersten Befehls abzurufen.

$ nano > /dev/null &
$ top -n1 -b | grep 'nano'
$ top -n1 -b | awk '/nano/ {print $1}'

Da top eine Echtzeitausgabe liefert, anstatt statische Daten an das Terminal zu senden, haben wir das -n1 verwendet und -b Option zum Drucken der statischen Ausgabe. Anschließend können Sie die PPID-Informationen abrufen, indem Sie entweder den grep-Befehl oder den awk-Befehl unter Linux verwenden.

Beenden Sie den nicht reagierenden Linux-Prozess

Sie können eine der oben genannten Methoden verwenden, um die PPID des nicht reagierenden Prozesses abzurufen. Sobald Sie dies erhalten haben, ist es an der Zeit, den Prozess vollständig zu beenden. Es gibt mehrere Befehle, die uns dies ermöglichen, wie zum Beispiel kill , pkill und killall . Wir werden in den folgenden Abschnitten nacheinander sehen, wie sie funktionieren.

Methode 1:Verwenden des Kill-Befehls

Der Kill-Befehl wird von Linux-Administratoren aufgrund seiner Einfachheit und robusten Aktionen häufig verwendet. Es nimmt die PID des Prozesses und ein Signal. Der Kernel beendet/stoppt die Ausführung des Prozesses basierend auf diesem Signal. Sie können den nächsten Befehl verwenden, um alle verfügbaren Signale für den Kill-Befehl anzuzeigen.

$ kill -l

Wie Sie sehen können, bietet kill 64 verschiedene Signale. Wir werden in diesem Leitfaden jedoch nur zwei davon besprechen. Dies sind Signal 9 (SIGKILL) und Signal 15 (SIGTERM). SIGTERM oder Signal 15 ist die sichere Methode, einen nicht reagierenden Prozess zu beenden. SIGKILL oder Signal 9 hingegen erzwingen das Beenden eines Linux-Prozesses.

$ kill -9 8631
$ kill -KILL 8631

Die obigen Befehle sind gleichwertig und erzwingen das Beenden des Prozesses mit der PID 8631. Das ist die PPID des Prozesses „nano“ in meinem System. Ersetzen Sie dies durch die PID des nicht reagierenden Prozesses in Ihrem System.

$ kill -15 8631
$ kill -TERM 8631

Die obigen Befehle sind ebenfalls gleichwertig und beenden den Prozess ordnungsgemäß. Aus diesem Grund kann es einige Zeit dauern, bis der Prozess beendet wird. Außerdem müssen Sie möglicherweise sudo anhängen vor dem Kill-Befehl, wenn der Prozess einem anderen Benutzer gehört.

Methode 2:Verwenden des pkill-Befehls

Der pkill-Befehl ist einer der vielseitigsten Prozessverwaltungsbefehle in Linux. Es ermöglicht uns, einen nicht reagierenden Prozess basierend auf seinem Namen, seiner PID, seinem Eigentümer und anderen Laufzeitattributen zu beenden. Es ist ein perfektes Werkzeug für Anfänger oder Leute, die mit vielen Standard-Terminalbefehlen nicht vertraut sind.

$ pkill nano
$ pkill 8631
$ pkill -e nano
$ pkill -f nano

Sie können einen der oben genannten pkill-Befehle verwenden, um einen Zombie-/nicht reagierenden Prozess in Linux zu beenden. Verwenden Sie das -e Option, wenn Sie eine Bestätigung für den Linux-Kill-Job wünschen. Der pkill-Befehl ermöglicht es Benutzern auch, bestimmte Beendigungssignale zu senden.

Methode 3:Verwenden des killall-Befehls

Mit dem Befehl killall können Benutzer nicht reagierende Prozesse basierend auf ihren Namen beenden. Es ist einfacher zu bedienen, kann aber Probleme bereiten, wenn Sie nicht vorsichtig sind. Da killall Prozesse basierend auf Namen beendet, besteht immer die Möglichkeit, dass Sie zufällig einen Prozess beenden. Wenn beispielsweise verschiedene Versionen von nano in Ihrem System verfügbar sind, wird das erste Beispiel alle beenden.

$ killall nano
$ killall --verbose nano
$ killall --interactive nano
$ killall --signal KILL nano

Das erste Beispiel zeigt die grundlegende Verwendung des Befehls killall unter Linux. Der zweite Befehl meldet, ob der Kill-Job erfolgreich war oder nicht, und der dritte Befehl fragt den Benutzer nach einer Bestätigung, bevor er den Prozess beendet. Standardmäßig verwendet killall das SIGTERM-Signal zum Beenden von Prozessen. Sie können das Signal jedoch manuell angeben, wie im letzten Beispiel gezeigt.

Methode 4:Praktische Einzeiler verwenden

Die wahre Schönheit von Linux liegt in der Tatsache, dass es Benutzern ermöglicht, anspruchsvolle Befehlskombinationen basierend auf ihren Bedürfnissen zu erstellen. Um dies zu demonstrieren, haben wir in diesem Abschnitt einige Einzeiler skizziert.

$ nano > /dev/null &
$ kill -9 $(pgrep nano)
$ ps aux | grep -e 'nano' | awk '{print $2}' | xargs kill -9

Im ersten Beispiel haben wir die Shell-Interpolation verwendet, um die PID des Prozesses „nano“ an den Linux-Kill-Befehl zu übergeben. Das zweite Beispiel verwendet mehrere alltägliche Terminalbefehle und E/A-Umleitung, um den Prozess abzubrechen. Sie können Ihre eigenen raffinierten Einzeiler erstellen, sobald Sie mit dem Linux-Terminal vertraut sind.

Methode 5:Beenden Sie mehrere Prozesse mithilfe von Linux-Shell-Skripts

Manchmal möchten Benutzer möglicherweise mehr als einen einzelnen Prozess beenden. Wir können solche Aufgaben leicht automatisieren, indem wir einfache Shell-Skripte schreiben. Wenn Sie an diesem Thema interessiert sind, lesen Sie unseren vorherigen Leitfaden zu Linux-Shell-Skripten. Das folgende Skript ruft die PPID der Prozesse ab, die Sie beenden möchten, und beendet sie dann mithilfe von Kill-Signalen.

$ nano proc-killer.sh
#!/usr/bin/env bash

for pro in "[email protected]"
do
    pid=$(pgrep $pro | head -1)
    echo $pid

    comm="kill -9 $pid"
    eval $comm
done

Speichern Sie nun diese Datei und fügen Sie die Ausführungsberechtigung hinzu, indem Sie den folgenden Befehl ausführen.

$ chmod +x proc-killer.sh

Sie können diesem Skript nun die Namen der Prozesse übergeben, die Sie beenden möchten.

$ ./proc-killer.sh nano gedit vlc

Ersetzen Sie einfach die Argumente durch die Namen der nicht reagierenden Linux-Prozesse in Ihrem System.

Beenden Sie einen nicht reagierenden Prozess über die GUI

Sie können einen nicht reagierenden Prozess auch über die grafische Benutzeroberfläche oder das X-Fenster beenden. Im folgenden Abschnitt diskutieren wir zwei Methoden, um dies zu tun.

Methode 1:Verwenden der xkill-Anwendung

Moderne Linux-Distributionen verwenden das X-Grafikfenster, um Benutzern ein elegantes grafisches Erlebnis zu bieten. Es gibt ein einfaches Tool namens xkill, mit dem Benutzer ein nicht reagierendes GUI-Fenster schließen können. Dies ist möglich, da unter Linux das Titelfenster einer Anwendung von der Anwendung selbst getrennt ist.

Gehen Sie einfach zu Ihrem Linux-Terminalemulator und geben Sie xkill ein. Es verwandelt Ihren Mauszeiger in eine X-Taste, die zum Beenden jedes GUI-Fensters verwendet werden kann.

$ xkill

Jetzt müssen Sie nur noch auf die Fensterleiste der nicht reagierenden Anwendung klicken, und sie wird beendet und verschwindet sofort.

Methode 2:Verwenden der Systemüberwachungsanwendung unter Ubuntu

Die meisten Mainstream-Linux-Distributionen verfügen über eine Art GUI-Überwachungstools, mit dem Benutzer einen hängenden Linux-Prozess grafisch beenden können. Die System Monitor-Anwendung auf Ubuntu ermöglicht es uns beispielsweise, einen nicht reagierenden Prozess auf intuitive Weise zu beenden. Sie können einfach den toten Prozess aus der Prozessliste auswählen und ihn beenden, indem Sie mit der rechten Maustaste auf den Prozess klicken und die Option zum Beenden auswählen.

Es gibt viele weitere Alternativen zu dieser Anwendung, und wir sind sicher, dass Sie leicht eine für Ihre Distribution oder Desktop-Umgebung finden werden.

Abschlussgedanken

Da das Prozessmanagement unter Linux sehr vielseitig ist, sind Benutzer oft frustriert, wenn sie mit nicht reagierenden Prozessen zu tun haben. Deshalb haben unsere Redakteure in dieser Anleitung alle Möglichkeiten skizziert, einen toten Linux-Prozess zu beenden. Nachdem Sie dies gelesen haben, sollten Sie in der Lage sein, alle nicht reagierenden Prozesse entweder über die Befehlszeile oder über die GUI zu beenden. Sie können auch einen unserer Einzeiler-Befehle verwenden, um solche Belästigungen in kürzester Zeit zu beheben. Darüber hinaus können Sie mit unserem einfachen Shell-Skript sogar mehr als einen einzelnen Prozess beenden. Hoffentlich haben Sie die gesuchten Informationen von unserem Leitfaden erhalten.


Linux
  1. So beenden Sie einen Zombie-Prozess unter Linux

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

  3. So beenden Sie den größten Prozess in einem nicht reagierenden Linux-System

  4. Linux – Wie stellt man die Prozessoraffinität eines Prozesses unter Linux ein?

  5. Wie beendet man einen Prozess, der auf einem bestimmten Port in Linux läuft?

So beenden Sie Zombie-Prozesse in Linux

So ändern Sie die Priorität eines Prozesses in Linux

So beenden Sie den laufenden Linux-Prozess auf einem bestimmten Port

Wie man einen Prozess unter Linux beendet

So senden Sie Prozesse unter Linux an den Hintergrund

So führen Sie ein Downgrade von Paketen auf einem Linux-System durch:Der ultimative Leitfaden