Die Prozessverwaltung ist grundlegend für die Linux-Administration. Dieser Artikel erklärt die wichtigsten Tools zum Überwachen und Steuern von Prozessen.

Prozesse anzeigen

ps - Prozess-Status

# Alle Prozesse
ps aux

# Prozesse des aktuellen Benutzers
ps u

# Prozessbaum
ps auxf
ps -ejH

# Nach Name filtern
ps aux | grep nginx

# Nur PIDs
pgrep nginx
pgrep -u www-data

ps-Spalten erklärt

USER    Benutzer
PID     Prozess-ID
%CPU    CPU-Auslastung
%MEM    Speicherauslastung
VSZ     Virtueller Speicher (KB)
RSS     Physischer Speicher (KB)
TTY     Terminal
STAT    Status
START   Startzeit
TIME    CPU-Zeit
COMMAND Befehl

Prozess-Status (STAT)

R    Running
S    Sleeping
D    Disk sleep (uninterruptible)
Z    Zombie
T    Stopped
<    High priority
N    Low priority
s    Session leader
l    Multi-threaded
+    Foreground process

top und htop

top

top

Tastenkürzel in top:

h     Hilfe
q     Beenden
k     Prozess beenden (kill)
r     Priorität ändern (renice)
u     Nach Benutzer filtern
M     Nach Speicher sortieren
P     Nach CPU sortieren
1     CPU-Kerne einzeln anzeigen
c     Vollständigen Befehl anzeigen

htop (empfohlen)

apt install htop
htop

htop-Vorteile:

- Farbige Anzeige
- Mausunterstützung
- Horizontales und vertikales Scrollen
- Prozessbaum-Ansicht
- Suchen und Filtern

atop (detailliert)

apt install atop
atop

atop-Features:

- Historische Daten
- Disk I/O pro Prozess
- Netzwerk pro Prozess
- Ressourcen-Accounting

Prozesse beenden

kill

# Standard (SIGTERM)
kill 1234

# Erzwingen (SIGKILL)
kill -9 1234

# Nach Name
pkill nginx
pkill -u username

# Alle Prozesse eines Benutzers
killall -u username

# Signal-Liste
kill -l

Wichtige Signale

| Signal | Nummer | Beschreibung | |--------|--------|--------------| | SIGHUP | 1 | Konfiguration neu laden | | SIGINT | 2 | Interrupt (Ctrl+C) | | SIGQUIT | 3 | Quit mit Core Dump | | SIGKILL | 9 | Sofort beenden (erzwungen) | | SIGTERM | 15 | Sauber beenden (Standard) | | SIGSTOP | 19 | Pausieren | | SIGCONT | 18 | Fortsetzen |

Beispiele

# Nginx neu laden
kill -HUP $(pgrep nginx)

# Prozess pausieren
kill -STOP 1234

# Prozess fortsetzen
kill -CONT 1234

# Alle PHP-Prozesse beenden
pkill -9 php

Prozess-Priorität

nice und renice

# Prozess mit niedriger Priorität starten
nice -n 19 ./heavy-script.sh

# Priorität eines laufenden Prozesses ändern
renice -n 10 -p 1234

# Alle Prozesse eines Benutzers
renice -n 5 -u username

Nice-Werte

-20    Höchste Priorität
  0    Standard
+19    Niedrigste Priorität

ionice (I/O-Priorität)

# Mit niedriger I/O-Priorität
ionice -c 3 dd if=/dev/zero of=/tmp/test bs=1M count=1000

# Für laufenden Prozess
ionice -c 2 -n 7 -p 1234

Hintergrund-Prozesse

Jobs

# In Hintergrund starten
command &

# Laufenden Prozess in Hintergrund
Ctrl+Z
bg

# Hintergrund-Jobs anzeigen
jobs

# Job in Vordergrund holen
fg %1

# Job beenden
kill %1

nohup und disown

# Prozess überlebt Logout
nohup ./long-running.sh &

# Laufenden Prozess von Terminal lösen
disown -h %1

# Ausgabe umleiten
nohup ./script.sh > output.log 2>&1 &

screen und tmux

# Screen-Session starten
screen -S session-name

# Detach: Ctrl+A, D

# Wieder verbinden
screen -r session-name

# Liste aller Sessions
screen -ls
# Tmux-Session starten
tmux new -s session-name

# Detach: Ctrl+B, D

# Wieder verbinden
tmux attach -t session-name

# Liste aller Sessions
tmux ls

Ressourcen-Limits

ulimit

# Aktuelle Limits anzeigen
ulimit -a

# Maximale offene Dateien
ulimit -n 65535

# Maximale Prozesse
ulimit -u 4096

# Speicher-Limit
ulimit -v 8388608  # 8 GB in KB

Permanente Limits

# /etc/security/limits.conf

# Für Benutzer
username soft nofile 65535
username hard nofile 65535

# Für Gruppe
@webgroup soft nproc 4096

# Für alle
* soft core unlimited

cgroups

# CPU-Limit für Prozess
systemctl set-property user.slice CPUQuota=50%

# Memory-Limit
systemctl set-property user.slice MemoryLimit=2G

Systemd und Services

Service-Status

# Status prüfen
systemctl status nginx

# Aktive Services
systemctl list-units --type=service

# Alle Services
systemctl list-units --type=service --all

# Failed Services
systemctl --failed

Service-Verwaltung

# Starten/Stoppen
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx

# Aktivieren/Deaktivieren
systemctl enable nginx
systemctl disable nginx

Prozesse eines Services

# Haupt-PID
systemctl show nginx --property=MainPID

# Alle Prozesse
systemctl status nginx
# Oder:
pgrep -a nginx

Prozess-Informationen

/proc-Dateisystem

# Prozess-Informationen
ls /proc/1234/

# Befehlszeile
cat /proc/1234/cmdline

# Umgebungsvariablen
cat /proc/1234/environ

# Datei-Deskriptoren
ls -l /proc/1234/fd/

# Speicher-Map
cat /proc/1234/maps

# Status
cat /proc/1234/status

lsof - Offene Dateien

# Alle offenen Dateien
lsof

# Nach Prozess
lsof -p 1234

# Nach Benutzer
lsof -u username

# Nach Datei
lsof /var/log/syslog

# Netzwerk-Verbindungen
lsof -i
lsof -i :80
lsof -i tcp

strace - System-Calls

# Prozess verfolgen
strace -p 1234

# Neuen Prozess tracen
strace ls -la

# Nur bestimmte Calls
strace -e open,read,write ./program

# Mit Zeitstempeln
strace -t -p 1234

# In Datei speichern
strace -o trace.log ./program

Troubleshooting

CPU-intensive Prozesse

# Top CPU-Verbraucher
ps aux --sort=-%cpu | head -10

# In top/htop nach CPU sortieren
# Taste: P

Speicher-intensive Prozesse

# Top Speicher-Verbraucher
ps aux --sort=-%mem | head -10

# Detaillierte Speicherinfo
pmap 1234

Zombie-Prozesse

# Zombies finden
ps aux | awk '$8 ~ /Z/ {print}'

# Parent finden
ps -o ppid= -p $(pgrep -d, "defunct")

# Zombies können nur durch Parent beendet werden

Hängende Prozesse

# In D-State (uninterruptible)
ps aux | awk '$8 ~ /D/ {print}'

# Diese warten auf I/O
# Ursache: Festplatten- oder NFS-Probleme

Zusammenfassung

| Befehl | Funktion | |--------|----------| | ps aux | Alle Prozesse | | top/htop | Interaktive Übersicht | | kill -9 PID | Prozess beenden | | pgrep name | PID nach Name | | pkill name | Nach Name beenden | | nice -n 19 | Niedrige Priorität | | lsof -p PID | Offene Dateien | | strace -p PID | System-Calls |

| Signal | Verwendung | |--------|------------| | SIGTERM (15) | Sauber beenden | | SIGKILL (9) | Erzwungen beenden | | SIGHUP (1) | Config neu laden | | SIGSTOP (19) | Pausieren |

Fazit

Die Prozessverwaltung ist essentiell für die Server-Administration. htop bietet die beste interaktive Übersicht, während ps für Scripting ideal ist. Beenden Sie Prozesse möglichst mit SIGTERM, nicht SIGKILL. Nutzen Sie nice/ionice für ressourcenintensive Aufgaben und screen/tmux für lang laufende Prozesse. Das /proc-Dateisystem und lsof liefern detaillierte Informationen für Troubleshooting.