So verwenden Sie den ps-Befehl zum Überwachen von Linux-Prozessen

Erhalten Sie mit dem Befehl ps eine Momentaufnahme der Prozesse, die auf Ihrem Linux-Computer ausgeführt werden. Lokalisieren Sie Prozesse nach Name, Benutzer oder sogar Terminal mit so vielen oder wenigen Details, wie Sie benötigen. Wir zeigen Ihnen wie.

Prozessmanagement unter Linux

Das schlagende Herz aller Linux- und Unix-ähnlichen Betriebssysteme ist der Kernel. Zu seinen vielen Aufgaben gehört die Zuweisung von Systemressourcen wie RAM und CPU-Zeit. Diese müssen in Echtzeit jongliert werden, damit alle laufenden Prozesse entsprechend der Priorität jeder Aufgabe ihren gerechten Anteil erhalten.

Manchmal können Aufgaben blockiert werden, in eine enge Schleife geraten oder aus anderen Gründen nicht mehr reagieren. Oder sie laufen weiter, verschlingen aber zu viel CPU-Zeit oder RAM oder verhalten sich ähnlich unsozial. Manchmal müssen Aufgaben aus Gnade für alle Beteiligten erledigt werden. Der erste Schritt. Natürlich ist der betreffende Prozess zu identifizieren.

Aber vielleicht haben Sie überhaupt keine Aufgaben- oder Leistungsprobleme. Vielleicht sind Sie einfach nur neugierig, welche Prozesse in Ihrem Computer laufen, und möchten einen Blick unter die Haube werfen. Der Befehl ps erfüllt diese beiden Anforderungen. Es gibt dir eine Momentaufnahme dessen, was in Ihrem Computer passiert „im Augenblick.“

ps ist flexibel genug, um Ihnen genau die Informationen, die Sie benötigen, in genau dem gewünschten Format bereitzustellen. Tatsächlich hat ps sehr viele Möglichkeiten. Die hier beschriebenen Optionen erfüllen die häufigsten Anforderungen. Wenn Sie tiefer in ps einsteigen müssen, als wir es in diesem Artikel behandelt haben, werden Sie feststellen, dass unsere Einführung die Manpage leichter verständlich macht.

Listing-Prozesse

Der einfachste Weg, ps zu verwenden, besteht darin, es ohne Parameter zu starten:

ps

ps zeigt eine Liste der Prozesse an, die von dem Benutzer gestartet wurden, der den Befehl ausgeführt hat.

Die vier Spalten sind:

PID: Die Prozess-ID-Nummer des Prozesses.
TTY: Der Name der Konsole, an der der Benutzer angemeldet ist.
TIME: Die CPU-Verarbeitungszeit, die der Prozess verwendet hat.
CMD: Der Name des Befehls, der den Prozess gestartet hat

Listungsprozess für alle Benutzer

Durch Hinzufügen von -e (alle Prozesse auswählen) können wir ps veranlassen, die Prozesse aufzulisten, die von allen Benutzern gestartet wurden, nicht nur den Benutzer, der den ps-Befehl ausführt. Da dies eine lange Liste sein wird, verkürzen wir sie in weniger.

ps -e | less

Die Prozessliste wird in less umgeleitet.

Wir haben viel mehr Einträge in der Liste, aber wir sehen die gleichen vier Spalten wie zuvor. Die Einträge mit einem Fragezeichen ? in der Spalte TTY wurden nicht aus einem Terminalfenster gestartet.

Prozesshierarchie anzeigen

Manchmal kann es hilfreich sein, ein Problem herauszufinden oder einen bestimmten Prozess zu identifizieren, wenn Sie sehen können, welche Prozesse andere Prozesse gestartet haben. Dazu verwenden wir die Option -H (Hierarchie).

ps -eH | less

Die Einrückung gibt an, welche Prozesse welchen anderen Prozessen übergeordnet sind.

  So patchen Sie Dropbox für Linux-PCs, die kein Ext4 verwenden

Um etwas mehr Klarheit zu schaffen, können wir ps bitten, einige hinzuzufügen ASCII Linien und die Hierarchie als Baum zu zeichnen. Die Option dazu ist die Option –forst.

ps -eH --forest | less

Dies macht es einfacher zu verfolgen, welche Prozesse die Eltern anderer Prozesse sind.

Prozesse nach Namen auflisten

Sie können die Ausgabe von ps über grep an Listeneinträge weiterleiten die Namen haben, die dem Suchbegriff entsprechen. Hier suchen wir nach Einträgen, die dem Suchbegriff „firefox“ entsprechen:

ps -e | grep firefox

In diesem Fall ist die Ausgabe ein einzelner Eintrag für den Prozess, an dem wir interessiert sind. Wenn wir mehrere Instanzen von Firefox gestartet hätten, würde natürlich mehr als ein Element in der Liste zurückgegeben.

Mehr Spalten in der Ausgabe anzeigen

Um der Ausgabe weitere Spalten hinzuzufügen, verwenden Sie die Option -f (Vollformat).

ps -ef | less

Ein zusätzlicher Satz von Spalten ist in der Ausgabe von ps enthalten.

Die Spalten sind:

UID: Die Benutzer-ID des Eigentümers dieses Prozesses.
PID: Die Prozess-ID des Prozesses.
PPID: Parent-Prozess-ID des Prozesses.
C: Die Anzahl der Kinder, die der Prozess hat.
STIME: Startzeit. Der Zeitpunkt, zu dem der Prozess begonnen hat.
TTY: Der Name der Konsole, an der der Benutzer angemeldet ist.
TIME: Die CPU-Verarbeitungszeit, die der Prozess verwendet hat.
CMD: Der Name des Befehls, der den Prozess gestartet hat.

Durch die Verwendung der Option -F (extra full format) können wir noch mehr Spalten erhalten:

ps -eF | less

Die Spalten, die wir dieses Mal erhalten, erfordern ein seitliches Scrollen des Bildschirms, um sie alle anzuzeigen.

Durch Drücken der „Pfeil nach rechts“-Taste verschiebt sich die Anzeige nach links.

Die Spalten, die wir jetzt erhalten, sind:

UID: Die Benutzer-ID des Eigentümers dieses Prozesses.
PID: Die Prozess-ID des Prozesses.
PPID: Parent-Prozess-ID des Prozesses.
C: Die Anzahl der Kinder, die der Prozess hat.
SZ: Größe in RAM-Seiten des Prozessabbilds.
RSS: Größe des Residenten Sets. Dies ist der nicht ausgetauschte physische Speicher, der vom Prozess verwendet wird.
PSR: Der Prozessor, dem der Prozess zugewiesen ist.
STIME: Startzeit. Der Zeitpunkt, zu dem der Prozess begonnen hat.
TTY: Der Name der Konsole, an der der Benutzer angemeldet ist.
TIME: Die CPU-Verarbeitungszeit, die der Prozess verwendet hat.
CMD: Der Name des Befehls, der den Prozess gestartet hat.

Auflisten von Prozessen nach Prozess-ID

Sobald Sie die Prozess-ID für den gewünschten Prozess gefunden haben, können Sie sie mit dem Befehl ps verwenden, um die Details dieses Prozesses aufzulisten. Verwenden Sie die Option -p (nach Prozess-ID auswählen), um dies zu erreichen:

ps -p 3403

Die Details für diesen Vorgang sind aufgeführt:

Sie sind nicht auf eine Prozess-ID beschränkt. Sie können eine durch Leerzeichen getrennte Liste von Prozess-IDs bereitstellen.

Prozesse nach Befehl auflisten

Mit der Option -C (Befehl) können Sie mithilfe des Befehlsnamens nach einem Prozess suchen. Das heißt, der Name des Befehls, der den Prozess gestartet hat. Dies unterscheidet sich subtil von der Befehlszeile, die Pfadnamen und Parameter oder Optionen enthalten kann.

ps -C shutter

Die Details für den Verschlussvorgang werden aufgelistet.

  So installieren Sie Firefox von Grund auf neu unter Linux

Auflisten von Prozessen, die einem Benutzer gehören

Um die Prozesse anzuzeigen, die einem bestimmten Benutzer gehören, verwenden Sie die Option -u (Benutzerliste):

ps -u mary

Die Prozesse des Benutzerkontos mary werden angezeigt.

Listing-Prozesse nach Terminal

Um die einem TTY zugeordneten Prozesse anzuzeigen, verwenden Sie die Option -t (select by TTY). Ohne TTY-Nummer verwendet, berichtet die Option -t über Prozesse, die dem aktuellen Terminalfenster zugeordnet sind.

tty
ps -t

Der Befehl tty meldet, dass dies Pseudo-Teletyp 0 ist. Die von ps -t aufgelisteten Prozesse sind alle mit TTY pts/0 verbunden.

Wenn wir eine TTY-Nummer in der Befehlszeile übergeben, sollten wir einen Bericht über die mit diesem TTY verbundenen Prozesse erhalten.

ps -t 1

Diesmal sind die Prozesse alle mit TTY pts/1 verbunden.

Auswählen der anzuzeigenden Spalten

Mit der Option -o (Format) können Sie auswählen, welche Spalten Sie in die Ausgabe von ps einbeziehen möchten. Sie geben die Spalten nach Namen an. Die (lange) Liste der Spaltennamen kann auf der Seite eingesehen werden man-Seite im Abschnitt mit dem Titel „Standardformatbezeichner“. In diesem Beispiel wählen wir aus, dass die CPU-Zeit (pcpu) und die Befehlszeile mit Argumenten (Args) in der Ausgabe enthalten sind.

ps -e -o pcpu,args | less

Die Ausgabe enthält nur unsere beiden angeforderten Spalten.

Sortieren der Ausgabe nach Spalten

Sie können die Ausgabe mit der Option –sort sortieren lassen. Sortieren wir die Ausgabe nach der CPU-Spalte:

ps -e -o pcpu,args --sort -pcpu| less

Der Bindestrich „-“ beim Sortierparameter pcpu gibt eine absteigende Sortierreihenfolge an.

Um die zehn CPU-intensivsten Prozesse zu sehen, leiten Sie die Ausgabe durch den Kopf Befehl:

ps -e -o pcpu,args --sort -pcpu | head -10

Wir erhalten eine sortierte, abgeschnittene Liste.

Wenn wir unserer Anzeige weitere Spalten hinzufügen, können wir nach weiteren Spalten sortieren. Fügen wir die pmem-Spalte hinzu. Dies ist der Prozentsatz des Arbeitsspeichers des Computers, der von dem Prozess verwendet wird. Ohne Bindestrich oder mit Pluszeichen „+“ ist die Sortierreihenfolge aufsteigend.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

Wir erhalten unsere zusätzliche Spalte, und die neue Spalte wird in die Sortierung einbezogen. Die erste Spalte wird vor der zweiten Spalte sortiert und die zweite Spalte wird in aufsteigender Reihenfolge sortiert, da wir keinen Bindestrich auf pmem gesetzt haben.

Machen wir es etwas nützlicher und fügen wir die Prozess-ID-Spalte (pid) hinzu, damit wir die Prozessnummer jedes Prozesses in unserer Liste sehen können.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

Jetzt können wir die Prozesse identifizieren.

Killing-Prozesse nach Prozess-ID

Wir haben eine Reihe von Möglichkeiten zum Identifizieren von Prozessen behandelt, einschließlich Name, Befehl, Benutzer und Terminal. Wir haben auch Möglichkeiten behandelt, Prozesse anhand ihrer dynamischen Attribute wie CPU-Auslastung und Arbeitsspeicher zu identifizieren.

  So richten Sie ein Software-RAID unter Linux ein

So können wir auf die eine oder andere Weise die laufenden Prozesse identifizieren. Wenn wir ihre Prozess-ID kennen, können wir (falls erforderlich) jeden dieser Prozesse mit dem Befehl kill beenden. Wenn wir den Prozess 898 beenden wollten, würden wir dieses Format verwenden:

sudo kill 898

Wenn alles gut geht, wird der Vorgang stillschweigend beendet.

Tötungsprozesse nach Namen

Mit dem Befehl pkill können Sie Prozesse nach Namen beenden. Stellen Sie sicher, dass Sie den richtigen Prozess identifiziert haben! Dieser Befehl beendet den obersten Prozess.

sudo pkill top

Auch hier ist keine Nachricht eine gute Nachricht. Der Vorgang wird stillschweigend beendet.

Beenden mehrerer Prozesse nach Namen

Wenn mehrere Kopien eines Prozesses ausgeführt werden oder ein Prozess eine Reihe von untergeordneten Prozessen hervorgebracht hat (wie es Google Chrome kann), wie können Sie diese beenden? Das ist genauso einfach. Wir verwenden den killall-Befehl.

Wir haben zwei Kopien von Top Running:

ps -e | grep top

Wir können kündigen beide mit diesem Befehl:

sudo killall top

Keine Antwort bedeutet keine Probleme, daher wurden beide Prozesse beendet.

Holen Sie sich eine dynamische Ansicht mit top

Die Ausgabe von ps ist eine Snapshot-Ansicht. Es wird nicht aktualisiert. Um eine Aktualisierungsansicht der Prozesse zu erhalten, verwenden Sie den Befehl top. Es bietet eine dynamische Ansicht der Prozesse, die in Ihrem Computer ausgeführt werden. Die Anzeige ist zweigeteilt. Am oberen Bildschirmrand befindet sich ein Dashboard-Bereich, der aus Textzeilen besteht, und eine Tabelle im unteren Bereich des Bildschirms, die aus Spalten besteht.

Beginnen Sie oben mit diesem Befehl:

top

Die Spalten enthalten Informationen zu den Prozessen:

PID: Prozess-ID
BENUTZER: Name des Eigentümers des Prozesses
PR: Prozesspriorität
NI: Der schöne Wert des Prozesses
VIRT: Vom Prozess verwendeter virtueller Speicher
RES: Vom Prozess verwendeter residenter Speicher
SHR: Vom Prozess verwendeter gemeinsamer Speicher
S: Status des Prozesses. Siehe die Liste unten mit den Werten, die dieses Feld annehmen kann
%CPU: Anteil der vom Prozess seit dem letzten Update verbrauchten CPU-Zeit
%MEM: Anteil des verwendeten physischen Speichers
TIME+: Gesamte CPU-Zeit, die von der Aufgabe verwendet wird, in Hundertstelsekunden
BEFEHL: Befehlsname oder Befehlszeile (Name und Befehlszeilenparameter) Wenn die Befehlsspalte nicht sichtbar ist, drücken Sie die „Rechtspfeil“-Taste.

Der Status des Prozesses kann einer der folgenden sein:

D: Ununterbrochener Schlaf
R: Laufen
S: Schlafen
T: verfolgt (gestoppt)
Z: Zombie

Drücken Sie die Taste „Q“, um von oben zu verlassen.

Bevor Sie einen Prozess beenden

Stellen Sie sicher, dass es das ist, wonach Sie suchen, und stellen Sie sicher, dass es Ihnen keine Probleme bereiten wird. Es lohnt sich insbesondere, die Optionen -H (Hierarchie) und –forest zu überprüfen, um sicherzustellen, dass es keine wichtigen untergeordneten Prozesse gibt, die Sie vergessen haben.