Der Befehl ps zeigt laufende Prozesse an. Er liefert Informationen wie Prozess-ID, Ressourcenverbrauch und den ausführenden Benutzer.
Syntax des ps-Befehls
ps [OPTIONEN]
Der Befehl unterstützt drei verschiedene Optionsstile:
- UNIX-Stil mit Bindestrich:
-e,-f - BSD-Stil ohne Bindestrich:
aux - GNU-Stil mit doppeltem Bindestrich:
--sort
Diese Stile lassen sich kombinieren, aber für Konsistenz empfiehlt es sich, bei einem zu bleiben.
Grundlegende Verwendung
Ohne Optionen zeigt ps nur die Prozesse der aktuellen Shell:
ps
Die Ausgabe enthält vier Spalten:
PID TTY TIME CMD
1809 pts/0 00:00:00 bash
2043 pts/0 00:00:00 ps
PID- Die eindeutige Prozess-IDTTY- Das zugehörige TerminalTIME- Die verbrauchte CPU-ZeitCMD- Der ausgeführte Befehl
Alle Prozesse anzeigen
BSD-Stil mit aux
Die gebräuchlichste Variante, um alle Prozesse zu sehen:
ps aux
Die Optionen bedeuten:
a- Prozesse aller Benutzer anzeigenu- Benutzerorientiertes Format mit Detailsx- Auch Prozesse ohne Terminal einbeziehen (Hintergrunddienste)
Die Ausgabe umfasst elf Spalten:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.8 77616 8604 ? Ss 19:47 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 19:47 0:00 [kthreadd]
www-data 1523 0.2 1.2 125432 12844 ? S 19:48 0:15 nginx: worker
Die wichtigsten Spalten im Detail:
| Spalte | Bedeutung |
|---|---|
USER | Der Benutzer, dem der Prozess gehört |
%CPU | Aktuelle CPU-Auslastung in Prozent |
%MEM | Speicherverbrauch in Prozent |
VSZ | Virtueller Speicher in KiB |
RSS | Tatsächlich belegter Speicher in KiB |
STAT | Prozessstatus (S=schlafend, R=laufend, Z=Zombie) |
UNIX-Stil mit -ef
Die Alternative im UNIX-Stil:
ps -ef
-e- Alle Prozesse auswählen-f- Vollständiges Ausgabeformat
Diese Variante zeigt zusätzlich die PPID (Parent Process ID), also den übergeordneten Prozess:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 19:47 ? 00:00:01 /sbin/init
root 523 1 0 19:47 ? 00:00:00 /usr/sbin/sshd
Prozesse filtern
Prozesse eines Benutzers anzeigen
Mit der Option -u filterst du nach einem bestimmten Benutzer:
ps -f -u www-data
Prozesshierarchie darstellen
Die Option f (BSD) zeigt Eltern-Kind-Beziehungen als Baumstruktur:
ps auxf
Die Ausgabe verdeutlicht, welcher Prozess welchen gestartet hat:
root 523 0.0 0.1 12456 1892 ? Ss 19:47 0:00 /usr/sbin/sshd
root 1842 0.0 0.2 14232 2456 ? Ss 20:15 0:00 \_ sshd: admin
admin 1844 0.0 0.1 8756 1234 pts/0 Ss 20:15 0:00 \_ -bash
Nach Ressourcenverbrauch sortieren
Mit --sort ordnest du die Ausgabe nach beliebigen Spalten. Ein Minuszeichen vor dem Spaltennamen sortiert absteigend:
ps aux --sort=-%mem
Dieser Befehl zeigt die speicherintensivsten Prozesse zuerst. Für CPU-Auslastung:
ps aux --sort=-%cpu
Eigene Spalten auswählen
Mit der Option -o bestimmst du selbst, welche Informationen angezeigt werden:
ps -eo pid,user,comm,%mem --sort=-%mem
Dieses Beispiel zeigt nur PID, Benutzer, Befehlsname und Speicherverbrauch.
Nützliche Spaltenbezeichner:
pid- Prozess-IDppid- Parent-Prozess-IDuser- Benutzernamecomm- Befehlsname (kurz)args- Befehl mit Argumenten%cpu- CPU-Auslastung%mem- Speicherverbrauchetime- Laufzeit seit Start
Kombination mit anderen Befehlen
Mit grep filtern
Um einen bestimmten Prozess zu finden:
ps aux | grep nginx
Beachte: Dieser Befehl findet auch sich selbst (den grep-Prozess). Um das zu vermeiden:
ps aux | grep [n]ginx
Seitenweise Ausgabe
Bei vielen Prozessen ist less hilfreich:
ps aux | less
Praktische Beispiele
Die 10 speicherintensivsten Prozesse
ps aux --sort=-%mem | head -11
Alle Prozesse eines Dienstes finden
ps aux | grep apache2
Prozess-ID eines Programms ermitteln
ps -C firefox -o pid=
Die Option -C sucht nach dem Befehlsnamen, und pid= gibt nur die PID ohne Header aus.
Zusammenfassung
Der ps-Befehl ist ein grundlegendes Werkzeug zur Prozessanalyse. Die beiden gebräuchlichsten Varianten sind ps aux (BSD-Stil) und ps -ef (UNIX-Stil). Für detaillierte Informationen zu allen Optionen steht die Manpage bereit:
man ps