Einblick in laufende Prozesse mit dem Befehl ‚ps‘
Der Befehl ‚ps‘ ermöglicht es Ihnen, eine Momentaufnahme der auf Ihrem Linux-System aktiven Prozesse zu erhalten. Sie können Prozesse nach Namen, Benutzern oder sogar Terminals filtern, wobei der Detailgrad an Ihre Bedürfnisse anpassbar ist. Wir zeigen Ihnen, wie das funktioniert.
Prozessverwaltung unter Linux
Der Kern jedes Linux- und Unix-ähnlichen Betriebssystems ist der Kernel. Eine seiner wesentlichen Aufgaben ist die Verwaltung von Systemressourcen, wie Arbeitsspeicher und CPU-Zeit. Diese Zuteilung muss in Echtzeit erfolgen, damit alle Prozesse angemessenen Zugriff auf die Ressourcen erhalten, basierend auf der Priorität ihrer jeweiligen Aufgaben.
Gelegentlich können Prozesse blockiert sein, in Endlosschleifen geraten oder aus anderen Gründen nicht mehr reagieren. Andere wiederum verbrauchen möglicherweise übermäßig viel CPU-Leistung oder Arbeitsspeicher. In solchen Fällen kann es notwendig sein, diese Prozesse zu beenden. Der erste Schritt ist dabei stets die Identifizierung des betreffenden Prozesses.
Es kann aber auch sein, dass Sie gar keine Probleme mit der Leistung haben, sondern einfach nur neugierig sind, welche Prozesse auf Ihrem System laufen. Der Befehl ‚ps‘ erfüllt beide Anforderungen. Er gibt Ihnen eine aktuelle Übersicht über die Prozesse auf Ihrem Rechner.
Der Befehl ‚ps‘ ist sehr flexibel und erlaubt es Ihnen, genau die gewünschten Informationen im passenden Format zu erhalten. Die hier beschriebenen Optionen decken die häufigsten Anwendungsfälle ab. Sollten Sie tiefer in die Materie eintauchen müssen, wird Ihnen diese Einführung das Verständnis der Manpage erleichtern.
Auflistung von Prozessen
Die einfachste Anwendung von ‚ps‘ besteht darin, es ohne zusätzliche Parameter auszuführen:
ps
Dies listet alle Prozesse auf, die vom aktuellen Benutzer gestartet wurden.
Die vier Spalten bedeuten:
PID: Die Prozess-ID des Prozesses.
TTY: Das Terminal, an dem der Benutzer angemeldet ist.
TIME: Die bisherige CPU-Verarbeitungszeit des Prozesses.
CMD: Der Name des Befehls, der den Prozess gestartet hat.
Prozesse aller Benutzer auflisten
Durch die Verwendung der Option ‚-e‘ (alle Prozesse) können Sie ‚ps‘ anweisen, alle Prozesse, unabhängig vom Benutzer, aufzulisten. Da dies eine sehr lange Liste sein kann, leiten wir die Ausgabe zu ‚less‘ um:
ps -e | less
Die Prozessliste wird mit ‚less‘ angezeigt.
Die Liste ist nun deutlich länger, aber die Spalten sind die gleichen. Einträge mit einem Fragezeichen (?) in der Spalte TTY wurden nicht von einem Terminalfenster gestartet.
Die Prozesshierarchie visualisieren
Um besser zu verstehen, welche Prozesse andere gestartet haben, können Sie die Option ‚-H‘ (Hierarchie) verwenden.
ps -eH | less
Die Einrückung zeigt an, welche Prozesse anderen übergeordnet sind.
Für eine noch übersichtlichere Darstellung können Sie ‚ps‘ anweisen, die Hierarchie als Baumstruktur mit ASCII-Zeichen darzustellen. Verwenden Sie dazu die Option ‚–forest‘.
ps -eH --forest | less
Dies erleichtert das Nachvollziehen der Prozessverhältnisse.
Prozesse nach Namen filtern
Um die Ausgabe von ‚ps‘ nach einem bestimmten Suchbegriff zu filtern, verwenden Sie ‚grep‘. Im folgenden Beispiel suchen wir nach Prozessen, deren Name ‚firefox‘ enthält:
ps -e | grep firefox
Hier wird ein einzelner Prozess gefunden, der unserem Suchbegriff entspricht. Hätten wir mehrere Firefox-Instanzen gestartet, würden diese natürlich auch angezeigt.
Zusätzliche Spalten in der Ausgabe anzeigen
Um weitere Spalten in die Ausgabe aufzunehmen, verwenden Sie die Option ‚-f‘ (Vollformat):
ps -ef | less
Es wurden zusätzliche Spalten zur Ausgabe hinzugefügt.
Die Spalten bedeuten jetzt:
UID: Die Benutzer-ID des Prozesseigentümers.
PID: Die Prozess-ID.
PPID: Die ID des übergeordneten Prozesses.
C: Die Anzahl der Kindprozesse.
STIME: Der Startzeitpunkt des Prozesses.
TTY: Das Terminal, an dem der Benutzer angemeldet ist.
TIME: Die bisherige CPU-Verarbeitungszeit.
CMD: Der Name des Befehls, der den Prozess gestartet hat.
Mit der Option ‚-F‘ (extra full format) können wir noch weitere Spalten hinzufügen:
ps -eF | less
Diese Ausgabe enthält so viele Spalten, dass es erforderlich ist, seitlich zu scrollen.
Mit der Pfeiltaste nach rechts können Sie seitlich scrollen.
Diese Spalten bedeuten:
UID: Die Benutzer-ID des Prozesseigentümers.
PID: Die Prozess-ID.
PPID: Die ID des übergeordneten Prozesses.
C: Die Anzahl der Kindprozesse.
SZ: Die Größe des Prozessabbilds im RAM (in Seiten).
RSS: Die Größe des Resident Set, also der nicht ausgelagerte, physikalische Speicher.
PSR: Der Prozessor, dem der Prozess zugewiesen ist.
STIME: Der Startzeitpunkt des Prozesses.
TTY: Das Terminal, an dem der Benutzer angemeldet ist.
TIME: Die bisherige CPU-Verarbeitungszeit.
CMD: Der Name des Befehls, der den Prozess gestartet hat.
Prozesse nach Prozess-ID anzeigen
Wenn Sie die Prozess-ID eines bestimmten Prozesses kennen, können Sie ‚ps‘ nutzen, um detaillierte Informationen zu diesem Prozess anzuzeigen. Verwenden Sie die Option ‚-p‘ (nach Prozess-ID auswählen):
ps -p 3403
Hier sind die Details des angegebenen Prozesses:
Sie können auch eine Liste von Prozess-IDs (durch Leerzeichen getrennt) angeben.
Prozesse nach Befehl auflisten
Mit der Option ‚-C‘ (Befehl) können Sie nach Prozessen anhand des Namens des Befehls suchen, der sie gestartet hat. Dies unterscheidet sich von der Befehlszeile, die Pfade und zusätzliche Parameter enthalten kann.
ps -C shutter
Die Details zum Prozess ’shutter‘ werden angezeigt.
Prozesse eines bestimmten Benutzers anzeigen
Um die Prozesse eines bestimmten Benutzers zu sehen, verwenden Sie die Option ‚-u‘ (Benutzerliste):
ps -u mary
Hier sind alle Prozesse des Benutzers ‚mary‘ aufgelistet.
Prozesse nach Terminal anzeigen
Um die Prozesse anzuzeigen, die mit einem bestimmten TTY verbunden sind, verwenden Sie die Option ‚-t‘ (nach TTY auswählen). Ohne TTY-Nummer zeigt ‚-t‘ die Prozesse des aktuellen Terminals an.
tty
ps -t
Der Befehl ‚tty‘ meldet, dass es sich um das Pseudo-Terminal 0 handelt. Die von ‚ps -t‘ angezeigten Prozesse sind alle mit ‚pts/0‘ verbunden.
Wenn Sie eine TTY-Nummer übergeben, erhalten Sie eine Liste der Prozesse, die mit diesem TTY verbunden sind.
ps -t 1
In diesem Fall sind alle Prozesse mit ‚pts/1‘ verbunden.
Auswahl der anzuzeigenden Spalten
Mit der Option ‚-o‘ (Format) können Sie die Spalten auswählen, die in der Ausgabe von ‚ps‘ angezeigt werden sollen. Geben Sie die Spalten nach Namen an. Die (lange) Liste der Spaltennamen finden Sie in der Manpage im Abschnitt „STANDARD FORMAT SPECIFIERS“. Im folgenden Beispiel wählen wir die CPU-Zeit (pcpu) und die Befehlszeile mit Argumenten (args) aus.
ps -e -o pcpu,args | less
Die Ausgabe zeigt nur die beiden angeforderten Spalten.
Sortieren der Ausgabe nach Spalten
Die Ausgabe kann mit der Option ‚–sort‘ sortiert werden. Sortieren wir die Ausgabe nach der CPU-Spalte:
ps -e -o pcpu,args --sort -pcpu| less
Der Bindestrich „-“ vor dem Sortierparameter ‚pcpu‘ bewirkt eine absteigende Sortierung.
Um die zehn Prozesse mit der höchsten CPU-Auslastung anzuzeigen, leiten Sie die Ausgabe zum Befehl ‚head‘ um:
ps -e -o pcpu,args --sort -pcpu | head -10
Hier erhalten wir eine sortierte, gekürzte Liste.
Wenn wir weitere Spalten hinzufügen, können wir auch nach diesen sortieren. Fügen wir die Spalte ‚pmem‘ hinzu, die den Prozentsatz des genutzten Arbeitsspeichers anzeigt. Ohne Bindestrich oder mit dem Pluszeichen „+“ wird aufsteigend sortiert.
ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10
Die neue Spalte wird hinzugefügt und in die Sortierung einbezogen. Die erste Spalte wird vor der zweiten sortiert, und die zweite Spalte wird aufsteigend sortiert, da wir keinen Bindestrich vor ‚pmem‘ gesetzt haben.
Um die Liste nützlicher zu machen, fügen wir die Prozess-ID-Spalte (‚pid‘) hinzu.
ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10
Jetzt können wir die Prozesse eindeutig identifizieren.
Prozesse mit der kill-Funktion beenden
Wir haben diverse Möglichkeiten zur Identifizierung von Prozessen kennengelernt, darunter Name, Befehl, Benutzer und Terminal. Wir haben auch gesehen, wie man Prozesse anhand ihrer dynamischen Attribute wie CPU- und Arbeitsspeicherauslastung identifizieren kann.
Nachdem wir die Prozess-ID herausgefunden haben, können wir den entsprechenden Prozess mit dem Befehl ‚kill‘ beenden. Um beispielsweise den Prozess mit der ID 898 zu beenden, verwenden Sie den folgenden Befehl:
sudo kill 898
Wenn alles gut geht, wird der Prozess ohne weitere Meldung beendet.
Prozesse nach Namen beenden
Mit dem Befehl ‚pkill‘ können Sie Prozesse anhand ihres Namens beenden. Stellen Sie sicher, dass Sie den richtigen Prozess ausgewählt haben! Dieser Befehl beendet den Prozess ‚top‘.
sudo pkill top
Auch hier gilt: Keine Meldung bedeutet, dass der Prozess erfolgreich beendet wurde.
Mehrere Prozesse gleichzeitig beenden
Was tun, wenn mehrere Kopien eines Prozesses laufen oder ein Prozess eine Reihe von untergeordneten Prozessen erzeugt hat (wie es bei Google Chrome der Fall sein kann)? Die Lösung ist einfach: Verwenden Sie den Befehl ‚killall‘.
Wir haben beispielsweise zwei Instanzen von ‚top‘ am Laufen:
ps -e | grep top
Wir können beide mit diesem Befehl beenden:
sudo killall top
Keine Fehlermeldung signalisiert, dass beide Prozesse erfolgreich beendet wurden.
Dynamische Prozessansicht mit ‚top‘
Die Ausgabe von ‚ps‘ ist eine Momentaufnahme und wird nicht aktualisiert. Für eine fortlaufend aktualisierte Anzeige der Prozesse verwenden Sie den Befehl ‚top‘. Er liefert eine dynamische Ansicht der auf Ihrem Rechner laufenden Prozesse. Die Anzeige ist zweigeteilt: ein Text-Dashboard oben und eine Tabelle mit Spalten im unteren Bereich des Bildschirms.
Starten Sie ‚top‘ mit diesem Befehl:
top
Die Spalten enthalten folgende Informationen:
PID: Prozess-ID
BENUTZER: Name des Prozesseigentümers
PR: Prozesspriorität
NI: Der Niceness-Wert des Prozesses
VIRT: Vom Prozess genutzter virtueller Speicher
RES: Vom Prozess genutzter residenter Speicher
SHR: Vom Prozess genutzter gemeinsamer Speicher
S: Status des Prozesses. Siehe die Liste der möglichen Werte unten
%CPU: Anteil der CPU-Zeit, die der Prozess seit der letzten Aktualisierung beansprucht hat
%MEM: Anteil des verwendeten physikalischen Speichers
TIME+: Gesamte CPU-Zeit, die von der Aufgabe genutzt wurde (in Hundertstelsekunden)
BEFEHL: Befehlsname oder -zeile (Name und Parameter). Wenn die Befehlsspalte nicht sichtbar ist, drücken Sie die Pfeiltaste nach rechts.
Der Prozessstatus kann folgende Werte annehmen:
D: Unterbrechungsfreier Schlaf
R: Läuft
S: Schläft
T: Verfolgt (angehalten)
Z: Zombie
Drücken Sie die Taste ‚Q‘, um ‚top‘ zu beenden.
Bevor Sie einen Prozess beenden
Stellen Sie sicher, dass Sie den richtigen Prozess ausgewählt haben und dass das Beenden keine unerwünschten Konsequenzen hat. Es lohnt sich, die Optionen ‚-H‘ (Hierarchie) und ‚–forest‘ zu verwenden, um zu überprüfen, ob es keine wichtigen Kindprozesse gibt, die Sie möglicherweise übersehen haben.