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.

ps

ps aux — Zeigt alle Prozesse aller Nutzer mit ausführlichen Details (BSD-Syntax).

ps aux

ps -ef — Zeigt alle Prozesse im vollständigen Format (UNIX/POSIX-Syntax).

ps -ef

ps -eF — Zeigt alle Prozesse im erweiterten Vollformat (inklusive Speichergröße).

ps -eF

ps aux --sort=-%mem — Zeigt alle Prozesse nach Speicherverbrauch sortiert (höchster zuerst).

ps aux --sort=-%mem | head -20

ps aux --sort=-%cpu — Zeigt alle Prozesse nach CPU-Auslastung sortiert (höchste zuerst).

ps aux --sort=-%cpu | head -20

Prozesse filtern

ps -p <pid> — Zeigt Informationen zu einem bestimmten Prozess anhand seiner PID.

ps -p 1234

ps -u <user> — Zeigt alle Prozesse eines bestimmten Nutzers.

ps -u www-data

ps -C <name> — Zeigt Prozesse anhand ihres Kommandonamens.

ps -C nginx

ps 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 1000

ps -t <tty> — Zeigt Prozesse, die an ein bestimmtes Terminal gebunden sind.

ps -t pts/0

Ausgabe formatieren

ps -eo <columns> — Zeigt alle Prozesse mit selbst gewählten Ausgabespalten.

ps -eo pid,ppid,user,%cpu,%mem,cmd

ps -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=-%mem

ps -eo pid,cmd --sort=pid — Listet alle PIDs und ihre Kommandos, nach PID sortiert.

ps -eo pid,cmd --sort=pid

ps -eo pid,ppid,pgid,sid,cmd — Zeigt die Hierarchie-IDs (Eltern, Gruppe, Sitzung).

ps -eo pid,ppid,pgid,sid,cmd

ps -o pid,ni,pri,cmd — Zeigt Priorität und Nice-Wert der Prozesse.

ps -eo pid,ni,pri,cmd --sort=-ni

Prozessbaum

ps axjf — Zeigt Prozesse als Baum (Forest-Ansicht).

ps axjf

ps -ef --forest — Zeigt den Prozessbaum im Vollformat (GNU ps).

ps -ef --forest

pstree — Stellt Prozesse als Baum dar (eigenständiges Kommando, oft vorinstalliert).

pstree -p

pstree -u <user> — Zeigt den Prozessbaum eines bestimmten Nutzers.

pstree -u www-data

pstree -p <pid> — Zeigt den Prozessbaum ab einer bestimmten PID.

pstree -p 1234

Prozesszustä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 -10

ps -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 -10

ps -eo stat | grep -c Z — Zählt Zombie-Prozesse.

ps -eo stat | grep -c Z

ps -eo user | sort | uniq -c | sort -rn — Zählt die Prozesse pro Nutzer.

ps -eo user | sort | uniq -c | sort -rn

ps -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 nginx

ps -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,cmd

ppid — Eltern-Prozess-ID.

ps -eo pid,ppid,cmd

%cpu / %mem — CPU- und Speicherauslastung in Prozent.

ps -eo pid,%cpu,%mem,cmd

vsz / rss — Virtuelle Speichergröße / Resident Set Size (physischer Speicher) in KB.

ps -eo pid,vsz,rss,cmd

stat — Zustandscode des Prozesses (R, S, D, T, Z usw.).

ps -eo pid,stat,cmd

start / lstart — Kurze / vollständige Startzeit des Prozesses.

ps -eo pid,lstart,cmd

time / etimes — Kumulierte CPU-Zeit / Laufzeit in Sekunden.

ps -eo pid,time,etimes,cmd

ni — Nice-Wert (-20 bis 19, niedriger = höhere Priorität).

ps -eo pid,ni,cmd

tty — Steuerndes Terminal.

ps -eo pid,tty,cmd

args / 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.

Verwandte Kommandos

  • top – Prozesse und Ressourcen live im Terminal überwachen
  • htop – interaktiver, farbiger Prozess-Monitor als komfortable top-Alternative
  • kill – Prozesse über ihre PID per Signal beenden