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)
  • htop installiert (apt install htop oder dnf 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
SpalteBedeutung
USEREigentümer des Prozesses
PIDProzess-ID
%CPUCPU-Nutzung seit Prozessstart
%MEMResidenter Speicher als % des Gesamt-RAMs
VSZVirtueller Speicherverbrauch (KB)
RSSResident Set Size — tatsächlich verwendetes RAM (KB)
STATProzesszustand (R=laufend, S=schlafend, Z=Zombie, T=gestoppt)
COMMANDVollstä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:

TasteAktion
PNach CPU-Nutzung sortieren
MNach Speichernutzung sortieren
TNach kumulativer CPU-Zeit sortieren
kPID zum Beenden eingeben
rProzess renicen
1Ansicht pro CPU-Kern umschalten
uNach Benutzername filtern
fFeldmanager öffnen (Spalten hinzufügen/entfernen)
qBeenden
dAktualisierungsintervall ändern (Sekunden)
HEinzelne 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:

TasteAktion
F2Einrichtung (Farben, Spalten, Meter)
F3Prozessliste durchsuchen
F4Filtern (nur passende Prozesse anzeigen)
F5Baumansicht (Prozesshierarchie)
F6Sortierspalte auswählen
F9Signal an ausgewählten Prozess senden
F10Beenden
PfeiltastenProzessliste navigieren
LeertasteProzess 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

Funktionpstophtoppgrep/pkill
Live-AktualisierungNeinJaJaNein
MausunterstützungNeinBegrenztJaNein
BaumansichtFlag --forestNeinF5Nein
Signale sendenNeinTaste kF9Direkt
Filtern/SuchenPipe zu grepTaste uF4/F3Nach Muster/Regex
Farbige AusgabeNeinEinfachUmfangreichNein
Skript-tauglichAusgezeichnetSchlechtSchlechtAusgezeichnet
Installation nötigEingebautEingebautJaEingebaut

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:

SignalNummerStandardaktionAnwendungsfall
SIGTERM15Sauberes BeendenNormaler Stopp — ermöglicht Aufräumen
SIGKILL9Sofortiges BeendenProzess ignoriert SIGTERM
SIGHUP1Konfiguration neu ladenDaemons zur Neukonfiguration veranlassen
SIGSTOP19Pause (nicht blockierbar)Prozess anhalten
SIGCONT18FortsetzenAngehaltenen Prozess fortsetzen
SIGUSR1/210/12BenutzerdefiniertApp-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 aux liefert einen Snapshot, sortierbar nach CPU oder Speicher; verwenden Sie --forest für eine Baumansicht.
  • top und htop bieten Live-Monitoring; htop ergä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 / pgrep sind skriptfreundliche Alternativen zu kill, wenn Sie einen Namen statt einer PID kennen.
  • nice / renice passen die Scheduling-Priorität an (-20 bis 19); negative Werte erfordern root.
  • bg / fg / jobs steuern Shell-Jobs; verwenden Sie nohup oder tmux, um Abmeldungen zu überleben.
  • /proc/<PID>/ ist die Wahrheitsquelle — status, cmdline, fd/ und maps enthüllen alles über einen laufenden Prozess.

Verwandte Artikel