Prozesse (systemd)

Prozesse unter Linux

Ein Prozess ist ein laufendes Programm. Jeder Prozess hat eine eindeutige PID (Process ID) und einen Parent-Prozess (PPID). Der erste Prozess beim Systemstart hat die PID 1 – in modernen Linux-Systemen ist das systemd.

Prozesse haben verschiedene Zustände:

  • Running (R): Prozess läuft oder wartet auf CPU-Zeit

  • Sleeping (S): Prozess wartet auf ein Ereignis (I/O, Signal)

  • Stopped (T): Prozess wurde mit SIGSTOP angehalten

  • Zombie (Z): Prozess ist beendet aber nicht vom Parent-Prozess abgeholt

Prozesse anzeigen und verwalten

# Alle laufenden Prozesse anzeigen
ps aux

# Prozessbaum anzeigen
pstree

# Interaktive Prozessübersicht (wie Task-Manager)
top

# Modernere interaktive Übersicht
htop

# Prozess nach Name suchen
pgrep nginx
pidof nginx

# Prozess beenden (Signal SIGTERM – höflich)
kill 1234        # per PID
kill -15 1234    # SIGTERM explizit

# Prozess sofort beenden (Signal SIGKILL – brutal)
kill -9 1234

# Prozess nach Name beenden
pkill nginx
killall nginx

Signale

Signal

Nummer

Bedeutung

SIGTERM

15

Beenden anfordern – Prozess kann aufräumen

SIGKILL

9

Sofort beenden – nicht abfangbar

SIGHUP

1

Konfiguration neu laden

SIGSTOP

19

Prozess anhalten

SIGCONT

18

Angehaltenen Prozess fortsetzen

Prozesse im Vorder- und Hintergrund

# Prozess im Hintergrund starten
./skript.sh &

# Laufenden Prozess in den Hintergrund schicken
# Erst Strg+Z (stoppt den Prozess), dann:
bg

# Hintergrundprozess in den Vordergrund holen
fg

# Alle Hintergrundprozesse anzeigen
jobs

# Prozess läuft weiter wenn Terminal geschlossen wird
nohup ./skript.sh &

systemd – der Init-Dienst

systemd ist seit Jahren der Standard-Init-Dienst in allen großen Linux-Distributionen (Ubuntu, RHEL, Debian, SUSE). Es ist der erste Prozess (PID 1) und startet alle anderen Dienste. Es löste das ältere SysV-Init-System ab.

systemd verwaltet Units – Konfigurationseinheiten für Dienste, Mounts, Timer und mehr. Die wichtigsten Unit-Typen:

  • .service: Systemdienste (nginx, sshd, mysql)

  • .timer: Zeitgesteuerte Aufgaben (Cron-Ersatz)

  • .mount: Einhängepunkte

  • .socket: Socket-Aktivierung

systemctl – Dienste verwalten

systemctl ist das Hauptwerkzeug zur Verwaltung von systemd-Units:

# Dienst starten
systemctl start nginx

# Dienst stoppen
systemctl stop nginx

# Dienst neu starten
systemctl restart nginx

# Dienst neu laden (Konfiguration ohne Neustart)
systemctl reload nginx

# Dienststatus anzeigen
systemctl status nginx

# Dienst beim Boot automatisch starten
systemctl enable nginx

# Autostart deaktivieren
systemctl disable nginx

# Dienst aktivieren UND sofort starten
systemctl enable --now nginx

# Alle laufenden Dienste anzeigen
systemctl list-units --type=service --state=running

# Alle fehlgeschlagenen Dienste
systemctl --failed

journalctl – Logs mit systemd

systemd protokolliert alle Dienste im Journal. journalctl ist das Tool zum Lesen des Journals:

# Alle Logs anzeigen
journalctl

# Logs eines bestimmten Dienstes
journalctl -u nginx

# Logs seit dem letzten Boot
journalctl -b

# Logs in Echtzeit verfolgen (wie tail -f)
journalctl -f

# Logs der letzten Stunde
journalctl --since "1 hour ago"

# Logs zwischen zwei Zeitpunkten
journalctl --since "2024-01-01 08:00" --until "2024-01-01 10:00"

# Nur Fehlermeldungen
journalctl -p err

Eigene systemd-Services erstellen

Unit-Dateien für eigene Dienste werden unter /etc/systemd/system/ erstellt:

# /etc/systemd/system/mein-dienst.service
[Unit]
Description=Mein eigener Dienst
After=network.target

[Service]
Type=simple
User=www-data
ExecStart=/usr/bin/python3 /opt/mein-skript.py
Restart=always

[Install]
WantedBy=multi-user.target
# Nach dem Erstellen einer neuen Unit-Datei:
systemctl daemon-reload
systemctl enable --now mein-dienst

Ressourcenüberwachung

# CPU- und Speicherauslastung (interaktiv)
top
htop

# Speichernutzung
free -h

# Festplattennutzung
df -h        # freier Speicher pro Partition
du -sh /var  # Größe eines Verzeichnisses

# I/O-Auslastung
iostat
iotop

# Netzwerk-Auslastung
iftop
nethogs

Zusammenfassung

  • Jeder Prozess hat eine PID – PID 1 ist systemd

  • Prozesse anzeigen: ps aux, top, htop

  • Prozesse beenden: kill -15 (SIGTERM, höflich) oder kill -9 (SIGKILL, sofort)

  • systemd ist der Standard-Init-Dienst – verwaltet Dienste als Units

  • systemctl: start, stop, restart, reload, enable, disable, status

  • journalctl: Logs lesen – -u Dienst, -f (live), -b (seit Boot)

  • Eigene Services: Unit-Datei in /etc/systemd/system/, dann daemon-reload