Linux-Prozessverwaltung ist eine grundlegende Sysadmin-Kompetenz — ob Sie einen außer Kontrolle geratenen CPU-Verbraucher aufspüren, einen fehlerhaften Daemon sauber stoppen oder die Scheduling-Priorität für einen Batch-Job anpassen: Wer Prozesse inspizieren und kontrollieren kann, hält Systeme gesund. Dieser Leitfaden deckt das vollständige Werkzeugset ab: ps aux, top, htop, kill-Signale, nice/renice, Hintergrundprozesse und das /proc-Dateisystem — mit praktischen Beispielen, die Sie sofort einsetzen können.
Voraussetzungen
- Ein Linux-System (jede Distribution — Ubuntu, Debian, RHEL, Fedora, Arch)
- Terminalzugang mit einem regulären Benutzerkonto (einige Befehle erfordern
sudo) htopinstalliert (apt install htopoderdnf install htop) für den htop-Abschnitt- Grundkenntnisse der Kommandozeile
Prozesse auflisten mit ps
ps (process status) ist das klassische Snapshot-Werkzeug. Es liest /proc und gibt den aktuellen Prozesszustand zum Zeitpunkt der Ausführung aus — im Gegensatz zu top aktualisiert es sich nicht automatisch.
ps aux — BSD-Syntax
ps aux
| Spalte | Bedeutung |
|---|---|
| USER | Eigentümer des Prozesses |
| PID | Prozess-ID |
| %CPU | CPU-Nutzung seit Prozessstart |
| %MEM | Residenter Speicher als % des Gesamt-RAMs |
| VSZ | Virtueller Speicherverbrauch (KB) |
| RSS | Resident Set Size — tatsächlich verwendetes RAM (KB) |
| STAT | Prozesszustand (R=laufend, S=schlafend, Z=Zombie, T=gestoppt) |
| COMMAND | Vollständige Befehlszeile |
Nach CPU sortieren und die größten Verbraucher anzeigen:
ps aux --sort=-%cpu | head -20
ps aux --sort=-%mem | head -20
Prozesse nach Name finden, ohne dass grep selbst in den Ergebnissen erscheint:
ps aux | grep '[n]ginx'
ps -ef — UNIX-Syntax
ps -ef
ps -ef fügt die Spalte PPID (Elternprozess-ID) hinzu, was beim Nachverfolgen von Prozessbäumen unverzichtbar ist. Verwenden Sie -eH oder --forest für eine Baumansicht:
ps -eH
ps -ef --forest
Prozesszustände erklärt
- R — ausführbar (auf CPU oder in der Run-Queue)
- S — unterbrechbarer Schlaf (wartet auf I/O oder ein Ereignis)
- D — nicht unterbrechbarer Schlaf (meist Disk-I/O — kann nicht beendet werden)
- Z — Zombie (beendet, aber Elternprozess hat noch nicht abgeräumt)
- T — gestoppt (Strg+Z oder SIGSTOP)
Eine hohe Anzahl von Prozessen im Zustand D deutet auf I/O-Sättigung hin. Z-Zombies sind in kleiner Anzahl harmlos, weisen aber auf einen Elternprozess hin, der wait() nicht aufruft.
Interaktive Überwachung mit top
top bietet eine live-aktualisierende Ansicht (Standard: 3-Sekunden-Intervall). Starten Sie es und verwenden Sie diese Tastenkürzel:
| Taste | Aktion |
|---|---|
P | Nach CPU-Nutzung sortieren |
M | Nach Speichernutzung sortieren |
T | Nach kumulativer CPU-Zeit sortieren |
k | PID zum Beenden eingeben |
r | Prozess renicen |
1 | Ansicht pro CPU-Kern umschalten |
u | Nach Benutzername filtern |
f | Feldmanager öffnen (Spalten hinzufügen/entfernen) |
q | Beenden |
d | Aktualisierungsintervall ändern (Sekunden) |
H | Einzelne Threads statt Prozesse anzeigen |
Der Header fasst Lastmittelwerte (1, 5, 15 Minuten), CPU-Aufteilung (us/sy/id/wa) und Arbeitsspeicher zusammen. Ein wa-Wert (I/O-Wartezeit) über 10–15 % deutet meist auf einen Speicher-Engpass hin.
top nicht-interaktiv ausführen, um einen Snapshot zu erfassen:
top -bn1 | head -30
Erweiterte Prozessüberwachung mit htop
htop ist top mit einer farbigen Benutzeroberfläche, Mausunterstützung und intuitiveren Steuerungen. Nach Installation und Start führt Sie die Funktionstasten-Leiste am unteren Rand:
| Taste | Aktion |
|---|---|
F2 | Einrichtung (Farben, Spalten, Meter) |
F3 | Prozessliste durchsuchen |
F4 | Filtern (nur passende Prozesse anzeigen) |
F5 | Baumansicht (Prozesshierarchie) |
F6 | Sortierspalte auswählen |
F9 | Signal an ausgewählten Prozess senden |
F10 | Beenden |
| Pfeiltasten | Prozessliste navigieren |
Leertaste | Prozess für Massenaktionen markieren |
htop zeigt CPU-Balken pro Kern, Arbeitsspeicher- und Swap-Balken und erlaubt horizontales Scrollen für lange Befehlszeilen — alles, wofür top zusätzliche Tastenkombinationen erfordert.
Vergleich der Prozessverwaltungswerkzeuge
| Funktion | ps | top | htop | pgrep/pkill |
|---|---|---|---|---|
| Live-Aktualisierung | Nein | Ja | Ja | Nein |
| Mausunterstützung | Nein | Begrenzt | Ja | Nein |
| Baumansicht | Flag --forest | Nein | F5 | Nein |
| Signale senden | Nein | Taste k | F9 | Direkt |
| Filtern/Suchen | Pipe zu grep | Taste u | F4/F3 | Nach Muster/Regex |
| Farbige Ausgabe | Nein | Einfach | Umfangreich | Nein |
| Skript-tauglich | Ausgezeichnet | Schlecht | Schlecht | Ausgezeichnet |
| Installation nötig | Eingebaut | Eingebaut | Ja | Eingebaut |
Verwenden Sie ps und pgrep/pkill in Skripten; nutzen Sie top oder htop für die interaktive Arbeit auf Servern.
Signale senden: kill, pkill, killall
Signale sind der primäre IPC-Mechanismus zur Prozesskontrolle. Die wichtigsten:
| Signal | Nummer | Standardaktion | Anwendungsfall |
|---|---|---|---|
| SIGTERM | 15 | Sauberes Beenden | Normaler Stopp — ermöglicht Aufräumen |
| SIGKILL | 9 | Sofortiges Beenden | Prozess ignoriert SIGTERM |
| SIGHUP | 1 | Konfiguration neu laden | Daemons zur Neukonfiguration veranlassen |
| SIGSTOP | 19 | Pause (nicht blockierbar) | Prozess anhalten |
| SIGCONT | 18 | Fortsetzen | Angehaltenen Prozess fortsetzen |
| SIGUSR1/2 | 10/12 | Benutzerdefiniert | App-spezifisch (z.B. Log-Rotation) |
kill nach PID
kill 1234 # SIGTERM — freundliche Anfrage
kill -15 1234 # explizites SIGTERM
kill -9 1234 # SIGKILL — ohne Gnade
kill -HUP 1234 # Konfiguration neu laden
kill -l # alle Signalnamen auflisten
Versuchen Sie immer zuerst SIGTERM. Warten Sie 10–30 Sekunden und eskalieren Sie dann bei Bedarf zu SIGKILL.
pkill und pgrep — nach Name oder Muster suchen
pgrep nginx # PIDs auflisten, die "nginx" entsprechen
pgrep -u www-data nginx # auf einen bestimmten Benutzer einschränken
pkill nginx # SIGTERM an alle passenden Prozesse
pkill -9 nginx # SIGKILL an alle passenden
pkill -HUP nginx # nginx-Konfiguration neu laden (wie kill -HUP $(pgrep nginx))
killall — alle Instanzen nach exaktem Namen beenden
killall firefox
killall -9 java
killall -u jcarlos # alle Prozesse eines Benutzers beenden
pkill akzeptiert Regex und Teilübereinstimmungen; killall erfordert den exakten Prozessnamen. Bevorzugen Sie pkill in Skripten.
Prioritätsanpassung mit nice und renice
Linux plant Prozesse anhand eines Niceness-Werts von -20 (höchste Priorität, am wenigsten rücksichtsvoll gegenüber anderen) bis 19 (niedrigste Priorität). Der Standard ist 0. Nur root kann negative Werte setzen.
nice — Priorität beim Start festlegen
nice -n 19 tar -czf backup.tar.gz /var/data # Hintergrund-Backup, niedrige Priorität
nice -n -5 ./realtime-processor # höhere Priorität (erfordert sudo)
sudo nice -n -10 ./critical-task
renice — laufenden Prozess anpassen
renice -n 10 -p 1234 # Priorität von PID 1234 senken
sudo renice -n -5 -p 1234 # Priorität erhöhen (root erforderlich)
renice -n 15 -u jcarlos # Priorität aller Prozesse eines Benutzers senken
Aktuellen Niceness-Wert mit ps prüfen:
ps -o pid,ni,comm -p 1234
Hintergrundprozesse: bg, fg und jobs
Die Job-Steuerung der Shell ermöglicht die Verwaltung mehrerer Aufgaben ohne zusätzliche Terminals.
long-running-command & # direkt im Hintergrund starten
./script.sh # im Vordergrund ausführen
# Strg+Z drücken zum Anhalten
[1]+ Stopped ./script.sh
jobs # Jobs auflisten
# [1]+ Stopped ./script.sh
# [2]- Running long-running-command &
bg %1 # Job 1 im Hintergrund fortsetzen
fg %1 # Job 1 in den Vordergrund bringen
fg %2 # Job 2 in den Vordergrund bringen
disown %1 # Job von der Shell trennen (überlebt Abmeldung)
nohup ./script.sh & # immun gegen SIGHUP, Ausgabe nach nohup.out
& und bg binden den Prozess weiterhin an die Terminalsitzung. Verwenden Sie nohup, screen oder tmux für Prozesse, die eine Abmeldung überleben müssen.
Das /proc-Dateisystem erkunden
Alles, was ps und top wissen, stammt aus dem virtuellen /proc-Dateisystem — einem lebendigen Fenster in die Prozesstabelle des Kernels.
ls /proc/1234/ # alle Dateien für PID 1234
cat /proc/1234/status # menschenlesbarer Status (Name, State, VmRSS, Threads…)
cat /proc/1234/cmdline # vollständige Befehlszeile (null-getrennt)
cat /proc/1234/environ # Umgebungsvariablen beim Start
ls -l /proc/1234/fd/ # offene Dateideskriptoren (Sockets, Pipes, Dateien)
cat /proc/1234/maps # Speicher-Map
cat /proc/self/status # Informationen über den aktuellen Shell-Prozess
Nützliche systemweite /proc-Dateien:
cat /proc/loadavg # 1m, 5m, 15m Last + laufende/Gesamtprozesse
cat /proc/meminfo # detaillierte Speicherstatistiken
cat /proc/cpuinfo # CPU-Details pro Kern
cat /proc/uptime # Systemlaufzeit in Sekunden
Praxisszenario: CPU-Spitze auf dem Produktionsserver
Sie haben einen Produktions-Webserver, der plötzlich 100 % CPU erreicht. Hier ist das Playbook:
# 1. Den Verursacher identifizieren
ps aux --sort=-%cpu | head -10
# 2. Mehr Details abrufen (offene Dateien, Netzwerkverbindungen)
PID=<offending pid>
ls -l /proc/$PID/fd | wc -l # Anzahl der Dateideskriptoren
cat /proc/$PID/status # Threads und Speicher prüfen
cat /proc/$PID/cmdline # exakter Befehl
# 3. Zuerst sauberes Stoppen versuchen
kill -15 $PID
sleep 15
# 4. Prüfen, ob er gestoppt hat
ps -p $PID
# 5. Bei Bedarf erzwungen beenden
kill -9 $PID
# 6. Falls es ein Dienst ist, sauber neu starten
sudo systemctl restart myapp
Falls der Prozess ein bekannter Daemon ist, kann kill -HUP ausreichen, um einen festgefahrenen Zustand ohne vollständigen Neustart zu beheben.
Fallstricke und Sonderfälle
SIGKILL kann nicht abgefangen oder ignoriert werden. Ein Prozess im nicht unterbrechbaren Schlaf (Zustand D, wartend auf I/O) reagiert erst auf SIGKILL, wenn das I/O abgeschlossen ist. In diesem Fall ist das zugrunde liegende Gerät oder der NFS-Mount meistens das Problem.
Zombie-Prozesse sind kein Speicherleck. Ein Zombie (Zustand Z) belegt eine PID, aber keine Ressourcen. Er verschwindet, wenn der Elternprozess wait() aufruft. Häufen sich Zombies an, ist der Elternprozess fehlerhaft — das Beenden des Elternprozesses oder dessen Behebung ist die Lösung, nicht das direkte Beenden des Zombies.
ps %CPU ist ein Lebensdurchschnitt, kein Momentwert. Der %CPU-Wert in ps aux wird über die gesamte Prozesslaufzeit berechnet. Ein Prozess, der gestern Spitzenlast hatte und jetzt im Leerlauf ist, zeigt einen niedrigen Wert. Verwenden Sie top oder htop für Echtzeit-CPU-Daten.
nice erfordert root für negative Werte. Reguläre Benutzer können den Niceness-Wert nur erhöhen (Priorität senken). Das versehentliche Eingeben von nice -10 (was bash als Flag -1 0 interpretiert) ist ein häufiger Fehler — verwenden Sie immer nice -n 10.
pkill sucht nach Teilzeichenketten. pkill python beendet python3, python2 und jeden Prozess, der “python” im Namen hat — einschließlich Ihres Editors, falls dieser einen Python-Interpreter einbettet. Verwenden Sie zuerst pgrep, um zu prüfen, was übereinstimmen wird.
Job-Steuerung gilt pro Shell. jobs zeigt nur Jobs, die in der aktuellen Shell-Sitzung gestartet wurden. Verwenden Sie ps aux | grep befehl, um getrennte Prozesse zu finden.
Fehlerbehebung
“Operation not permitted” beim Beenden eines Prozesses — Sie versuchen, einen Prozess eines anderen Benutzers oder einen Root-Prozess zu beenden. Verwenden Sie sudo kill PID.
Prozess startet sofort nach dem Beenden neu — ein Supervisor (systemd, supervisord, Docker) startet ihn neu. Stoppen Sie den Dienst stattdessen mit sudo systemctl stop dienstname.
kill -9 funktioniert nicht — der Prozess befindet sich im D-Zustand (nicht unterbrechbarer Schlaf). Prüfen Sie iostat -x 1 auf I/O-Wartezeiten; das Blockgerät oder Netzwerkdateisystem ist blockiert. In extremen Fällen kann ein Neustart notwendig sein.
htop zeigt wachsende Swap-Nutzung — das System steht unter Speicherdruck. Verwenden Sie ps aux --sort=-%mem | head -10, um die größten Verbraucher zu finden, und erwägen Sie das Hinzufügen von Swap oder den Neustart der betreffenden Anwendung.
Hoher Load Average bei niedriger CPU-Nutzung — Prozesse warten auf I/O, nicht auf CPU. Prüfen Sie iostat, iotop und D-Zustand-Zählungen mit ps aux | awk '$8 ~ /D/ {print}'.
Zusammenfassung
ps auxliefert einen Snapshot, sortierbar nach CPU oder Speicher; verwenden Sie--forestfür eine Baumansicht.topundhtopbieten Live-Monitoring;htopergänzt Farbe, Mausunterstützung und Funktionstasten-Kürzel.- Signale: Versuchen Sie immer zuerst SIGTERM (15), eskalieren Sie zu SIGKILL (9) nur bei Bedarf; SIGHUP (1) lädt bei den meisten Daemons die Konfiguration neu.
pkill/pgrepsind skriptfreundliche Alternativen zukill, wenn Sie einen Namen statt einer PID kennen.nice/renicepassen die Scheduling-Priorität an (-20 bis 19); negative Werte erfordern root.bg/fg/jobssteuern Shell-Jobs; verwenden Sienohupodertmux, um Abmeldungen zu überleben./proc/<PID>/ist die Wahrheitsquelle —status,cmdline,fd/undmapsenthüllen alles über einen laufenden Prozess.