# 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.

Source: https://www.jpkc.com/db/cheatsheets/shell-system/ps/

<!-- PROSE:intro -->
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.
<!-- PROSE:intro:end -->

## Grundlagen

`ps` — Zeigt die Prozesse der aktuellen Terminal-Sitzung.

```bash
ps
```

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

```bash
ps aux
```

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

```bash
ps -ef
```

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

```bash
ps -eF
```

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

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

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

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

## Prozesse filtern

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

```bash
ps -p 1234
```

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

```bash
ps -u www-data
```

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

```bash
ps -C nginx
```

`ps aux | grep <pattern>` — Sucht Prozesse, die zu einem Muster passen.

```bash
ps aux | grep '[n]ginx'
```

`ps -g <group>` — Zeigt alle Prozesse einer Sitzung bzw. einer effektiven Gruppe.

```bash
ps -g 1000
```

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

```bash
ps -t pts/0
```

## Ausgabe formatieren

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

```bash
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.

```bash
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.

```bash
ps -eo pid,cmd --sort=pid
```

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

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

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

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

## Prozessbaum

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

```bash
ps axjf
```

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

```bash
ps -ef --forest
```

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

```bash
pstree -p
```

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

```bash
pstree -u www-data
```

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

```bash
pstree -p 1234
```

## Prozesszustände

`R` — Läuft oder ist lauffähig (in der Run-Queue).

```bash
ps aux | awk '$8 ~ /R/'
```

`S` — Unterbrechbarer Schlaf (wartet auf ein Ereignis).

```bash
ps aux | awk '$8 ~ /S/'
```

`D` — Nicht unterbrechbarer Schlaf (meist Warten auf I/O). Lässt sich nicht per SIGKILL beenden.

```bash
ps aux | awk '$8 ~ /D/'
```

`T` — Angehalten (durch ein Signal oder beim Debuggen/Tracen).

```bash
ps aux | awk '$8 ~ /T/'
```

`Z` — Zombie-Prozess (beendet, aber vom Elternprozess noch nicht abgeräumt).

```bash
ps aux | awk '$8 ~ /Z/'
```

`I` — Leerlaufender Kernel-Thread.

```bash
ps aux | awk '$8 ~ /I/'
```

## Nützliche Muster

`ps aux | grep '[n]ginx'` — Findet Prozesse nach Namen, ohne den grep-Prozess selbst zu listen.

```bash
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.

```bash
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).

```bash
ps -eo pid,%mem,rss,cmd --sort=-rss | head -10
```

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

```bash
ps -eo stat | grep -c Z
```

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

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

`ps -p <pid> -o etimes=` — Zeigt die Laufzeit eines Prozesses in Sekunden.

```bash
ps -p 1234 -o etimes=
```

`ps -eo pid,lstart,cmd | grep <pattern>` — Zeigt die genaue Startzeit eines Prozesses.

```bash
ps -eo pid,lstart,cmd | grep nginx
```

`ps -eo pid,ppid,cmd | awk '$2 == 1'` — Findet alle Prozesse mit init (PID 1) als Elternprozess.

```bash
ps -eo pid,ppid,cmd | awk '$2 == 1'
```

## Spalten-Referenz

`pid` — Prozess-ID.

```bash
ps -eo pid,cmd
```

`ppid` — Eltern-Prozess-ID.

```bash
ps -eo pid,ppid,cmd
```

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

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

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

```bash
ps -eo pid,vsz,rss,cmd
```

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

```bash
ps -eo pid,stat,cmd
```

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

```bash
ps -eo pid,lstart,cmd
```

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

```bash
ps -eo pid,time,etimes,cmd
```

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

```bash
ps -eo pid,ni,cmd
```

`tty` — Steuerndes Terminal.

```bash
ps -eo pid,tty,cmd
```

`args / cmd` — Vollständiges Kommando mit allen Argumenten.

```bash
ps -eo pid,args
```

<!-- PROSE:outro -->
## 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](https://wiki.ubuntuusers.de/ps/) – deutschsprachige Übersicht zu ps mit Optionen und Beispielen
- [Wikipedia: ps (Unix)](https://de.wikipedia.org/wiki/Ps_(Unix)) – Hintergrund zu Geschichte und den verschiedenen Syntax-Varianten des Kommandos
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [top](https://www.jpkc.com/db/cheatsheets/shell-system/top/) – Prozesse und Ressourcen live im Terminal überwachen
- [htop](https://www.jpkc.com/db/cheatsheets/shell-system/htop/) – interaktiver, farbiger Prozess-Monitor als komfortable top-Alternative
- [kill](https://www.jpkc.com/db/cheatsheets/shell-system/kill/) – Prozesse über ihre PID per Signal beenden

