Zum Inhalt springen

Prozesse anzeigen

ps (Process Status) zeigt eine Momentaufnahme der laufenden Prozesse. Ohne Optionen zeigt es nur die Prozesse der aktuellen Shell-Sitzung.

ps ist historisch gewachsen und unterstützt drei verschiedene Optionsstile – was beim ersten Blick in die Manpage verwirrt:

StilKennzeichenHerkunftBeispiel
UNIXOptionen mit -POSIX-Standardps -e -f oder ps -ef
BSDOptionen ohne -BSD Unixps aux
GNULange Optionen mit --GNU/Linux-Erweiterungps --forest

Diese Stile lassen sich – in Grenzen – auch kombinieren:

Terminal-Fenster
ps -ef --forest # UNIX + GNU: alle Prozesse als Baum
ps aux --forest # BSD + GNU: dasselbe, anderes Ausgabeformat

ps hat Dutzende Optionen – niemand kennt sie alle auswendig. In der Praxis merkt man sich eine oder zwei Kombinationen, die für den eigenen Alltag passen, und greift bei Bedarf zur Manpage:

Terminal-Fenster
ps aux # weit verbreitet; zeigt USER, %CPU, %MEM, COMMAND
ps -ef # ebenfalls verbreitet; zeigt UID, PID, PPID, TIME, CMD
ps -ef --forest # wie -ef, aber mit Baumdarstellung der Eltern-Kind-Beziehungen
ps -eo pid,user,ni,stat,cmd # eigene Spaltenauswahl mit -o

Mit -o lässt sich die Ausgabe exakt auf die gewünschten Felder reduzieren:

Terminal-Fenster
ps -eo pid,ppid,user,stat,cmd --sort=-%cpu | head -10
# Top-10 Prozesse nach CPU-Auslastung, mit PID, PPID, User, Zustand und Befehl
USER PID %CPU %MEM VSZ RSS STAT COMMAND
root 1 0.0 0.1 168940 11832 Ss /sbin/init
alice 892 0.0 0.1 10936 5120 Ss bash
alice 1034 1.2 0.8 234512 34816 Sl vim bericht.txt
SpalteBedeutung
USERBesitzender Benutzer
PIDProzess-ID
%CPUCPU-Auslastung
%MEMAnteil am physischen RAM
VSZVirtueller Speicher (KB)
RSSTatsächlich genutzter RAM (Resident Set Size, KB)
STATProzesszustand (siehe unten)
COMMANDStartbefehl
CodeBedeutung
RRunning
SSleeping (unterbrechbar)
DSleeping (nicht unterbrechbar – wartet auf I/O)
TStopped
ZZombie
sSession-Leader
lMulti-threaded
+Im Vordergrund
<Erhöhte Priorität
NNiedrige Priorität (nice)
Terminal-Fenster
ps aux | grep nginx # läuft nginx?
ps aux | grep -v grep # grep selbst aus der Liste entfernen
ps -ef | grep "python" # Python-Prozesse finden

top zeigt laufend aktualisierte Prozessinformationen und gibt einen Überblick über die Systemauslastung:

Terminal-Fenster
top
top - 14:32:01 up 3 days, 2:14, 2 users, load average: 0.42, 0.38, 0.31
Tasks: 187 total, 1 running, 186 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 1.1 sy, 0.0 ni, 95.4 id, 0.2 wa, 0.0 hi, 0.1 si
MiB Mem : 15927.1 total, 8234.2 free, 4521.3 used, 3171.6 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 10892.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1034 alice 20 0 234512 34816 28400 S 1.2 0.2 0:03.14 vim
892 alice 20 0 10936 5120 3840 S 0.0 0.0 0:00.42 bash
TasteAktion
qBeenden
hHilfe
kProzess beenden (PID eingeben, dann Signal)
rPriorität ändern (renice)
uNach Benutzer filtern
MNach Speicherverbrauch sortieren
PNach CPU-Auslastung sortieren (Standard)
TNach Laufzeit sortieren
1CPU-Kerne einzeln anzeigen
  • load average: Durchschnittliche CPU-Last der letzten 1, 5 und 15 Minuten. Wert ≤ Anzahl CPU-Kerne = System nicht überlastet.
  • us/sy/id/wa: CPU-Zeit für User-Prozesse / System / Idle / Warten auf I/O

pgrep gibt die PIDs von Prozessen aus, deren Name auf ein Muster passt:

Terminal-Fenster
pgrep bash # alle bash-PIDs
pgrep -u alice # alle Prozesse von alice
pgrep -la nginx # PIDs und Namen anzeigen (-l)
pgrep -c sshd # Anzahl matching Prozesse

Nützlich in Skripten – statt ps aux | grep ... | awk ...:

Terminal-Fenster
if pgrep nginx > /dev/null; then
echo "nginx läuft"
fi

pstree zeigt alle Prozesse als Baum und macht Eltern-Kind-Beziehungen sofort sichtbar:

Terminal-Fenster
pstree # gesamter Baum ab PID 1
pstree alice # nur Prozesse von alice
pstree -p # mit PIDs
pstree -u # mit Benutzernamen
pstree $$ # Baum ab aktueller Shell
systemd─┬─sshd───sshd───bash───pstree
├─cron
└─nginx─┬─nginx
└─nginx