ps — Laufende Prozesse anzeigen und analysieren
Praxis-Guide zu ps: laufende Prozesse als Schnappschuss anzeigen, nach CPU und Speicher sortieren, nach Nutzer oder PID filtern und mit eigenen Spalten analysieren.
ps liefert dir einen Schnappschuss aller Prozesse, die in genau diesem Moment auf deinem System laufen – mit Prozess-ID, Eigentümer, CPU- und Speicherverbrauch sowie der vollständigen Kommandozeile. Anders als top oder htop aktualisiert ps nichts live, sondern friert den Zustand einmalig ein, ideal für Skripte, Logs und gezielte Analysen. Verwirrend ist anfangs nur der doppelte Syntax-Stil: BSD (ps aux, ohne Bindestrich) neben UNIX/POSIX (ps -ef). Dieser Guide sortiert beide und zeigt dir die Aufrufe, die im Alltag wirklich zählen.
Grundlagen
ps — Zeigt die Prozesse der aktuellen Terminal-Sitzung.
psps aux — Zeigt alle Prozesse aller Nutzer mit ausführlichen Details (BSD-Syntax).
ps auxps -ef — Zeigt alle Prozesse im vollständigen Format (UNIX/POSIX-Syntax).
ps -efps -eF — Zeigt alle Prozesse im erweiterten Vollformat (inklusive Speichergröße).
ps -eFps aux --sort=-%mem — Zeigt alle Prozesse nach Speicherverbrauch sortiert (höchster zuerst).
ps aux --sort=-%mem | head -20ps aux --sort=-%cpu — Zeigt alle Prozesse nach CPU-Auslastung sortiert (höchste zuerst).
ps aux --sort=-%cpu | head -20Prozesse filtern
ps -p <pid> — Zeigt Informationen zu einem bestimmten Prozess anhand seiner PID.
ps -p 1234ps -u <user> — Zeigt alle Prozesse eines bestimmten Nutzers.
ps -u www-dataps -C <name> — Zeigt Prozesse anhand ihres Kommandonamens.
ps -C nginxps aux | grep <pattern> — Sucht Prozesse, die zu einem Muster passen.
ps aux | grep '[n]ginx'ps -g <group> — Zeigt alle Prozesse einer Sitzung bzw. einer effektiven Gruppe.
ps -g 1000ps -t <tty> — Zeigt Prozesse, die an ein bestimmtes Terminal gebunden sind.
ps -t pts/0Ausgabe formatieren
ps -eo <columns> — Zeigt alle Prozesse mit selbst gewählten Ausgabespalten.
ps -eo pid,ppid,user,%cpu,%mem,cmdps -eo pid,ppid,user,%cpu,%mem,vsz,rss,stat,start,time,cmd — Umfassende Prozessliste mit allen wichtigen Feldern.
ps -eo pid,ppid,user,%cpu,%mem,vsz,rss,stat,start,time,cmd --sort=-%memps -eo pid,cmd --sort=pid — Listet alle PIDs und ihre Kommandos, nach PID sortiert.
ps -eo pid,cmd --sort=pidps -eo pid,ppid,pgid,sid,cmd — Zeigt die Hierarchie-IDs (Eltern, Gruppe, Sitzung).
ps -eo pid,ppid,pgid,sid,cmdps -o pid,ni,pri,cmd — Zeigt Priorität und Nice-Wert der Prozesse.
ps -eo pid,ni,pri,cmd --sort=-niProzessbaum
ps axjf — Zeigt Prozesse als Baum (Forest-Ansicht).
ps axjfps -ef --forest — Zeigt den Prozessbaum im Vollformat (GNU ps).
ps -ef --forestpstree — Stellt Prozesse als Baum dar (eigenständiges Kommando, oft vorinstalliert).
pstree -ppstree -u <user> — Zeigt den Prozessbaum eines bestimmten Nutzers.
pstree -u www-datapstree -p <pid> — Zeigt den Prozessbaum ab einer bestimmten PID.
pstree -p 1234Prozesszustände
R — Läuft oder ist lauffähig (in der Run-Queue).
ps aux | awk '$8 ~ /R/'S — Unterbrechbarer Schlaf (wartet auf ein Ereignis).
ps aux | awk '$8 ~ /S/'D — Nicht unterbrechbarer Schlaf (meist Warten auf I/O). Lässt sich nicht per SIGKILL beenden.
ps aux | awk '$8 ~ /D/'T — Angehalten (durch ein Signal oder beim Debuggen/Tracen).
ps aux | awk '$8 ~ /T/'Z — Zombie-Prozess (beendet, aber vom Elternprozess noch nicht abgeräumt).
ps aux | awk '$8 ~ /Z/'I — Leerlaufender Kernel-Thread.
ps aux | awk '$8 ~ /I/'Nützliche Muster
ps aux | grep '[n]ginx' — Findet Prozesse nach Namen, ohne den grep-Prozess selbst zu listen.
ps aux | grep '[p]hp-fpm'ps -eo pid,%cpu,%mem,cmd --sort=-%cpu | head -10 — Die zehn Prozesse mit der höchsten CPU-Auslastung.
ps -eo pid,%cpu,%mem,cmd --sort=-%cpu | head -10ps -eo pid,%mem,rss,cmd --sort=-rss | head -10 — Die zehn Prozesse mit dem höchsten Speicherverbrauch (RSS).
ps -eo pid,%mem,rss,cmd --sort=-rss | head -10ps -eo stat | grep -c Z — Zählt Zombie-Prozesse.
ps -eo stat | grep -c Zps -eo user | sort | uniq -c | sort -rn — Zählt die Prozesse pro Nutzer.
ps -eo user | sort | uniq -c | sort -rnps -p <pid> -o etimes= — Zeigt die Laufzeit eines Prozesses in Sekunden.
ps -p 1234 -o etimes=ps -eo pid,lstart,cmd | grep <pattern> — Zeigt die genaue Startzeit eines Prozesses.
ps -eo pid,lstart,cmd | grep nginxps -eo pid,ppid,cmd | awk '$2 == 1' — Findet alle Prozesse mit init (PID 1) als Elternprozess.
ps -eo pid,ppid,cmd | awk '$2 == 1'Spalten-Referenz
pid — Prozess-ID.
ps -eo pid,cmdppid — Eltern-Prozess-ID.
ps -eo pid,ppid,cmd%cpu / %mem — CPU- und Speicherauslastung in Prozent.
ps -eo pid,%cpu,%mem,cmdvsz / rss — Virtuelle Speichergröße / Resident Set Size (physischer Speicher) in KB.
ps -eo pid,vsz,rss,cmdstat — Zustandscode des Prozesses (R, S, D, T, Z usw.).
ps -eo pid,stat,cmdstart / lstart — Kurze / vollständige Startzeit des Prozesses.
ps -eo pid,lstart,cmdtime / etimes — Kumulierte CPU-Zeit / Laufzeit in Sekunden.
ps -eo pid,time,etimes,cmdni — Nice-Wert (-20 bis 19, niedriger = höhere Priorität).
ps -eo pid,ni,cmdtty — Steuerndes Terminal.
ps -eo pid,tty,cmdargs / cmd — Vollständiges Kommando mit allen Argumenten.
ps -eo pid,args Fazit
ps ist ein reines Lese-Kommando und damit ungefährlich: Es verändert nichts, sondern zeigt nur an. Für den Alltag reichen meist eine Handvoll Aufrufe – ps aux für den Gesamtüberblick, ps aux --sort=-%cpu bzw. --sort=-%mem zum Aufspüren von Ressourcenfressern und ps -o pid,ppid,cmd für maßgeschneiderte Spalten. Den Klassiker ps aux | grep nginx solltest du kennen (mit dem Trick '[n]ginx', damit grep sich nicht selbst listet); für reine Namens-Suchen ist pgrep allerdings präziser. Und denk daran: ps zeigt immer nur einen Schnappschuss – für eine fortlaufende Live-Ansicht greifst du zu top oder htop.
Weiterführende Links
- ubuntuusers-Wiki: ps – deutschsprachige Übersicht zu ps mit Optionen und Beispielen
- Wikipedia: ps (Unix) – Hintergrund zu Geschichte und den verschiedenen Syntax-Varianten des Kommandos