Skip to main content

5.1 Prozesse, Dienste und systemd

Linux führt Programme als Prozesse aus.

Ein Prozess ist ein laufendes Programm. Ein Dienst ist ein Programm, das meist im Hintergrund läuft und eine bestimmte Aufgabe für das System oder Netzwerk bereitstellt.

Für Fachinformatiker Systemintegration ist dieses Thema wichtig, weil Serverdienste wie SSH, Webserver, Datenbanken, DNS, DHCP, Backupdienste oder Monitoring-Agenten auf Linux-Systemen als Prozesse und Dienste laufen.

Merksatz:

Prozess = laufendes Programm.
Dienst = Hintergrundprogramm mit Aufgabe.

Lernziele

Nach dieser Seite solltest du erklären können:

- was ein Prozess ist
- was eine PID ist
- was ein Dienst ist
- was ein Daemon ist
- wie man Prozesse anzeigt
- wie man Prozesse beendet
- wie man Systemressourcen prüft
- wie Dienste mit systemd verwaltet werden
- was systemctl macht
- was enable und disable bedeuten
- wie man typische Dienstfehler eingrenzt

Grundidee

Wenn unter Linux ein Programm gestartet wird, entsteht daraus ein Prozess.

Beispiele:

- Shell
- Texteditor
- Webserver
- Datenbankserver
- Backupskript
- SSH-Server
- Cronjob
- Monitoring-Agent

Jeder Prozess verbraucht Ressourcen, zum Beispiel:

- CPU
- Arbeitsspeicher
- Dateizugriffe
- Netzwerkverbindungen
- Prozess-IDs
- offene Dateien

Merksatz:

Alles,
was läuft,
ist als Prozess im System sichtbar.

Prozess

Ein Prozess ist eine laufende Instanz eines Programms.

Beispiel:

Das Programm nginx ist installiert.

Wenn nginx gestartet wird,
laufen ein oder mehrere nginx-Prozesse.

Ein Programm kann mehrfach als Prozess laufen.

Beispiele:

mehrere Shells

mehrere Webserver-Worker

mehrere Datenbankprozesse

mehrere SSH-Sitzungen

Merksatz:

Programm = Datei auf dem System.
Prozess = laufendes Programm.

PID

PID steht für:

Process ID

Die PID ist eine eindeutige Nummer eines laufenden Prozesses.

Beispiel:

PID 1234

Mit der PID kann ein Prozess gezielt angesprochen werden, zum Beispiel zum Beenden oder Prüfen.

Merksatz:

PID = eindeutige Nummer eines Prozesses.

PPID

PPID steht für:

Parent Process ID

Das ist die Prozess-ID des Elternprozesses.

Viele Prozesse werden von anderen Prozessen gestartet.

Beispiel:

Eine Shell startet ein Skript.

Die Shell ist der Elternprozess.

Das Skript ist der Kindprozess.

Merksatz:

Prozesse können Eltern-
und Kindprozesse haben.

Prozesse anzeigen mit ps

Der Befehl ps zeigt Prozesse an.

Beispiele:

ps

ps aux

ps -ef

Bedeutung:

Befehl Bedeutung
ps Prozesse der aktuellen Shell anzeigen
ps aux viele Prozesse systemweit anzeigen
ps -ef Prozesse in anderem verbreiteten Format anzeigen

Typische Spalten:

Spalte Bedeutung
USER Benutzer, unter dem der Prozess läuft
PID Prozess-ID
%CPU CPU-Nutzung
%MEM Speicheranteil
COMMAND gestarteter Befehl
PPID Elternprozess-ID

Merksatz:

ps zeigt laufende Prozesse.

Prozesse suchen

Prozesse kann man mit ps und grep suchen.

Beispiel:

ps aux | grep nginx

Bedeutung:

ps aux zeigt Prozesse.

grep nginx filtert nach nginx.

Alternative Befehle:

pgrep nginx

pidof nginx

Bedeutung:

Befehl Bedeutung
pgrep nginx sucht Prozess-IDs nach Namen
pidof nginx zeigt PID eines laufenden Programms

Merksatz:

ps zeigt,
grep filtert.

Prozesse live überwachen mit top

top zeigt laufende Prozesse und Systemauslastung live an.

Starten:

top

Typische Informationen:

CPU-Auslastung

RAM-Nutzung

laufende Prozesse

Load Average

Prozessliste

Benutzer

Prozess-IDs

Beenden:

q

Merksatz:

top zeigt Systemlast live.

htop

htop ist eine komfortablere Alternative zu top.

Starten:

htop

Vorteile:

übersichtlicher

farbliche Anzeige

einfachere Prozessauswahl

leichteres Beenden von Prozessen

Wichtig:

htop ist nicht immer standardmäßig installiert.

Merksatz:

htop ist ein komfortabler Prozessmonitor,
falls installiert.

CPU, RAM und Load Average

Bei Prozessproblemen sind drei Werte besonders wichtig:

Wert Bedeutung
CPU Rechenleistung
RAM Arbeitsspeicher
Load Average durchschnittliche Systemlast

Hohe CPU-Auslastung kann bedeuten:

Prozess rechnet stark

Endlosschleife

hohe Nutzerlast

Angriff oder Fehlkonfiguration

Hohe RAM-Nutzung kann bedeuten:

Dienst benötigt viel Speicher

Speicherleck

zu viele Prozesse

falsche Konfiguration

Merksatz:

Langsame Systeme immer mit Messwerten prüfen.

Load Average einfach erklärt

Load Average zeigt, wie viele Prozesse im Durchschnitt auf CPU oder I/O warten.

Typische Anzeige:

load average: 0.50, 1.20, 2.10

Die drei Werte stehen für:

letzte 1 Minute

letzte 5 Minuten

letzte 15 Minuten

Ein hoher Wert kann auf Überlastung hindeuten.

Wichtig:

Bewertung hängt von der Anzahl der CPU-Kerne ab.

Merksatz:

Load Average zeigt durchschnittliche Systemlast.

Prozesse beenden mit kill

Mit kill sendet man ein Signal an einen Prozess.

Beispiel:

kill 1234

Das sendet standardmäßig ein TERM-Signal.

TERM bedeutet:

Prozess soll sauber beendet werden.

Wenn das nicht funktioniert:

kill -9 1234

Das sendet ein KILL-Signal.

Wichtig:

kill -9 beendet hart
und sollte nur verwendet werden,
wenn normales Beenden nicht funktioniert.

Merksatz:

Erst normal beenden,
dann nur notfalls kill -9.

Wichtige Signale

Signal Nummer Bedeutung
TERM 15 sauber beenden
KILL 9 sofort hart beenden
HUP 1 häufig Konfiguration neu laden
INT 2 Unterbrechung, ähnlich Strg+C

Beispiele:

kill -15 1234

kill -9 1234

kill -HUP 1234

Merksatz:

TERM bittet um Beenden.
KILL erzwingt Beenden.

Prozess mit Namen beenden

Mit pkill kann man Prozesse anhand des Namens beenden.

Beispiel:

pkill nginx

Wichtig:

Vorsichtig verwenden,
weil mehrere Prozesse betroffen sein können.

Besser vorher prüfen:

pgrep -a nginx

Merksatz:

pkill beendet nach Namen,
deshalb vorher genau prüfen.

Prozesse im Vordergrund und Hintergrund

Ein Prozess kann im Vordergrund oder Hintergrund laufen.

Vordergrund:

blockiert die aktuelle Shell,
bis er beendet ist.

Hintergrund:

läuft weiter,
während man die Shell weiter nutzen kann.

Befehl im Hintergrund starten:

befehl &

Beispiel:

sleep 60 &

Jobs anzeigen:

jobs

Merksatz:

& startet einen Befehl im Hintergrund.

Strg+C und Strg+Z

Wichtige Tastenkombinationen:

Tastenkombination Bedeutung
Strg+C laufenden Vordergrundprozess abbrechen
Strg+Z Prozess anhalten
fg angehaltenen Job in Vordergrund holen
bg angehaltenen Job im Hintergrund fortsetzen

Merksatz:

Strg+C beendet meist.
Strg+Z hält an.

Daemon

Ein Daemon ist ein Hintergrundprozess, der dauerhaft oder bei Bedarf eine Systemaufgabe erfüllt.

Typische Daemons:

sshd

cron

nginx

mysqld

systemd

rsyslogd

Viele Daemon-Namen enden auf:

d

Beispiele:

sshd = SSH-Daemon

cron oder crond = Cron-Daemon

Merksatz:

Daemon = Hintergrunddienst.

Dienst

Ein Dienst ist eine Systemfunktion, die meist im Hintergrund bereitgestellt wird.

Beispiele:

Dienst Zweck
ssh Fernadministration
nginx Webserver
apache2 Webserver
mariadb Datenbank
postgresql Datenbank
cron zeitgesteuerte Aufgaben
systemd-journald Logging
docker Containerdienst

Merksatz:

Dienste stellen Funktionen bereit.

systemd

systemd ist auf vielen modernen Linux-Distributionen das zentrale Init- und Dienstverwaltungssystem.

systemd ist zuständig für:

- Systemstart
- Dienste
- Abhängigkeiten
- Units
- Logging-Anbindung
- Timer
- Mounts
- Targets
- Systemzustände

Wichtig:

Nicht jede Linux-Distribution nutzt systemd.
Viele Serverdistributionen tun es aber.

Merksatz:

systemd verwaltet auf vielen Linux-Systemen Dienste und Systemstart.

Unit

Eine Unit ist eine Verwaltungseinheit von systemd.

Typische Unit-Arten:

Unit-Art Bedeutung
.service Dienst
.socket Socket-Aktivierung
.timer zeitgesteuerte Aufgabe
.mount Mountpoint
.target Zielzustand des Systems

Beispiel:

ssh.service

nginx.service

docker.service

Merksatz:

.service steht für einen Dienst.

systemctl

systemctl ist das wichtigste Werkzeug zur Verwaltung von systemd.

Typische Befehle:

systemctl status ssh

systemctl start ssh

systemctl stop ssh

systemctl restart ssh

systemctl reload ssh

systemctl enable ssh

systemctl disable ssh

Merksatz:

systemctl verwaltet systemd-Units.

Dienststatus prüfen

Status eines Dienstes prüfen:

systemctl status ssh

Typische Informationen:

Dienstname

aktiv oder inaktiv

Fehlerstatus

PID

Startzeit

letzte Logzeilen

Pfad zur Unit-Datei

Wichtige Zustände:

Zustand Bedeutung
active Dienst läuft
inactive Dienst läuft nicht
failed Dienst ist fehlgeschlagen
enabled startet automatisch beim Boot
disabled startet nicht automatisch beim Boot

Merksatz:

systemctl status ist die erste Prüfung bei Dienstproblemen.

Dienst starten

Dienst starten:

systemctl start ssh

Bedeutung:

Der Dienst wird jetzt gestartet.

Wichtig:

start bedeutet nicht automatisch,
dass der Dienst beim nächsten Neustart wieder startet.

Merksatz:

start startet jetzt.

Dienst stoppen

Dienst stoppen:

systemctl stop ssh

Bedeutung:

Der Dienst wird jetzt gestoppt.

Wichtig:

stop deaktiviert nicht automatisch den Autostart.

Merksatz:

stop stoppt jetzt.

Dienst neu starten

Dienst neu starten:

systemctl restart ssh

Bedeutung:

Der Dienst wird gestoppt und neu gestartet.

Typische Nutzung:

nach Konfigurationsänderungen

nach Fehlern

nach Updates

Wichtig:

Bei SSH vorsichtig sein,
besonders wenn man gerade per SSH verbunden ist.

Merksatz:

restart startet Dienst komplett neu.

Dienst neu laden

Dienst neu laden:

systemctl reload nginx

Bedeutung:

Der Dienst lädt seine Konfiguration neu,
ohne vollständig beendet zu werden.

Nicht jeder Dienst unterstützt reload.

Unterschied:

Befehl Bedeutung
restart Dienst komplett neu starten
reload Konfiguration neu laden, falls unterstützt

Merksatz:

reload ist oft schonender als restart,
wenn der Dienst es unterstützt.

Autostart aktivieren

Dienst beim Systemstart automatisch starten:

systemctl enable ssh

Wichtig:

enable startet den Dienst nicht unbedingt sofort.

Dafür braucht man:

systemctl start ssh

Oder kombiniert:

systemctl enable --now ssh

Merksatz:

enable aktiviert Autostart.

Autostart deaktivieren

Autostart deaktivieren:

systemctl disable ssh

Wichtig:

disable stoppt den aktuell laufenden Dienst nicht unbedingt sofort.

Dafür braucht man:

systemctl stop ssh

Merksatz:

disable entfernt Autostart.

enable, disable, start und stop unterscheiden

Befehl Wirkung
start startet Dienst jetzt
stop stoppt Dienst jetzt
enable startet Dienst künftig automatisch beim Boot
disable startet Dienst künftig nicht automatisch beim Boot
restart stoppt und startet Dienst jetzt neu
reload lädt Konfiguration neu, falls unterstützt

Merksatz:

start und stop gelten jetzt.
enable und disable gelten für den Systemstart.

Dienst prüfen nach Änderung

Nach Änderung an einem Dienst:

systemctl restart dienstname

systemctl status dienstname

journalctl -u dienstname

Typisches Vorgehen:

1. Konfiguration ändern

2. Syntax prüfen,
   falls möglich

3. Dienst neu laden oder neu starten

4. Status prüfen

5. Logs prüfen

Merksatz:

Nach Dienständerung immer Status und Logs prüfen.

journalctl für Dienste

Logs eines Dienstes anzeigen:

journalctl -u ssh

Live mitlesen:

journalctl -u ssh -f

Seit letztem Boot:

journalctl -u ssh -b

Nur letzte Einträge:

journalctl -u ssh -n 50

Merksatz:

journalctl -u zeigt Logs einer Unit.

Dienst läuft, aber Port ist nicht erreichbar

Mögliche Ursachen:

Dienst lauscht nicht auf erwarteter Adresse

Dienst lauscht auf anderem Port

lokale Firewall blockiert

Netzwerkfirewall blockiert

Dienst ist nur lokal gebunden

falsche Konfiguration

IPv4/IPv6-Verwechslung

Prüfen:

systemctl status dienst

ss -tulpen

journalctl -u dienst

Firewall-Regeln

Merksatz:

Dienst läuft heißt nicht automatisch:
Port ist erreichbar.

Offene Ports anzeigen

Mit ss kann man offene Ports und Verbindungen anzeigen.

Beispiele:

ss -tulpen

ss -tulpn

Bedeutung der Optionen:

Option Bedeutung
-t TCP
-u UDP
-l listening
-p Prozess anzeigen
-e erweiterte Informationen
-n numerische Anzeige

Merksatz:

ss zeigt,
welche Dienste auf welchen Ports lauschen.

Dienst lauscht nur auf localhost

Wenn ein Dienst nur auf 127.0.0.1 lauscht, ist er nur lokal erreichbar.

Beispiel:

127.0.0.1:8080

Bedeutung:

Nur Programme auf demselben System können direkt darauf zugreifen.

Wenn ein Dienst auf allen IPv4-Schnittstellen lauscht:

0.0.0.0:8080

Bedeutung:

Dienst lauscht auf allen IPv4-Interfaces.

Merksatz:

127.0.0.1 = nur lokal.
0.0.0.0 = alle IPv4-Interfaces.

Dienst startet nicht

Wenn ein Dienst nicht startet, sollte man prüfen:

systemctl status dienst

journalctl -u dienst

Konfigurationsdatei

Syntaxprüfung

Ports bereits belegt?

Rechte auf Dateien

Abhängigkeiten

Speicherplatz

Benutzer des Dienstes

Pfade

Zertifikate

Merksatz:

Dienstfehler immer mit Status und Logs eingrenzen.

Port bereits belegt

Ein Dienst kann nicht starten, wenn ein anderer Prozess denselben Port bereits nutzt.

Beispiel:

nginx soll TCP 80 nutzen,
aber Apache läuft bereits auf TCP 80.

Prüfen:

ss -tulpen

Lösung:

einen Dienst stoppen

Port ändern

Konfiguration anpassen

Merksatz:

Ein Port kann pro IP und Protokoll nur passend gebunden werden.

Dienst hat Rechteproblem

Ein Dienst läuft oft unter einem eigenen Benutzer.

Beispiel:

www-data

nginx

postgres

Wenn dieser Benutzer keine Rechte auf Dateien oder Verzeichnisse hat, kann der Dienst fehlschlagen.

Prüfen:

systemctl status dienst

journalctl -u dienst

ls -l datei

ls -ld verzeichnis

Merksatz:

Dienstprobleme können Rechteprobleme sein.

Dienst hat Konfigurationsfehler

Viele Dienste starten nicht, wenn die Konfiguration fehlerhaft ist.

Beispiele:

falsche Syntax

falscher Pfad

falscher Port

Zertifikat fehlt

Benutzer existiert nicht

ungültige Option

Viele Dienste bieten Syntaxprüfungen.

Beispiele:

nginx -t

apachectl configtest

Wichtig:

Vor restart möglichst Syntax prüfen,
wenn der Dienst das unterstützt.

Merksatz:

Konfiguration prüfen,
bevor man produktive Dienste neu startet.

Abhängigkeiten

Dienste können voneinander abhängig sein.

Beispiele:

Webanwendung braucht Datenbank.

Backupdienst braucht Netzwerkshare.

Monitoring braucht Netzwerk.

Containerdienst braucht Storage.

Wenn eine Abhängigkeit fehlt, startet der Dienst eventuell nicht korrekt oder funktioniert nur teilweise.

Merksatz:

Dienste funktionieren oft nur mit ihren Abhängigkeiten.

Dienste beim Boot

Beim Systemstart werden Dienste automatisch gestartet, wenn sie aktiviert sind.

Prüfen, ob ein Dienst aktiviert ist:

systemctl is-enabled ssh

Prüfen, ob ein Dienst läuft:

systemctl is-active ssh

Merksatz:

enabled heißt Autostart.
active heißt läuft gerade.

Targets

Targets sind systemd-Zielzustände.

Beispiele:

Target Bedeutung
multi-user.target Mehrbenutzerbetrieb ohne grafische Oberfläche
graphical.target Mehrbenutzerbetrieb mit grafischer Oberfläche
rescue.target Rettungsmodus
emergency.target Minimaler Notfallmodus

Merksatz:

Targets beschreiben Systemzustände.

Cron und systemd Timer

Zeitgesteuerte Aufgaben können unter Linux über cron oder systemd Timer laufen.

cron:

klassischer Zeitplaner

systemd Timer:

systemd-eigene zeitgesteuerte Units

Beispiele für Aufgaben:

Backup starten

Logs aufräumen

Updates prüfen

Skript regelmäßig ausführen

Merksatz:

Wiederkehrende Aufgaben laufen oft über cron oder systemd Timer.

Typische Prozessbefehle

Befehl Zweck
ps Prozesse anzeigen
ps aux viele Prozesse anzeigen
pgrep Prozesse nach Namen suchen
pidof PID eines Programms anzeigen
top Prozesse live überwachen
htop komfortabler Prozessmonitor
kill Signal an Prozess senden
pkill Prozess nach Namen beenden
jobs Hintergrundjobs anzeigen
fg Job in Vordergrund holen
bg Job im Hintergrund fortsetzen

Typische Dienstbefehle

Befehl Zweck
systemctl status dienst Dienststatus prüfen
systemctl start dienst Dienst jetzt starten
systemctl stop dienst Dienst jetzt stoppen
systemctl restart dienst Dienst neu starten
systemctl reload dienst Konfiguration neu laden
systemctl enable dienst Autostart aktivieren
systemctl disable dienst Autostart deaktivieren
systemctl enable --now dienst Autostart aktivieren und sofort starten
systemctl is-active dienst prüfen, ob Dienst läuft
systemctl is-enabled dienst prüfen, ob Autostart aktiv ist
journalctl -u dienst Dienstlogs anzeigen

Typische Fehlerbilder

Fehlerbild Wahrscheinliche Ursache
Dienst ist inactive Dienst läuft nicht
Dienst ist failed Startfehler oder Absturz
Dienst startet nicht Konfiguration, Rechte, Port, Abhängigkeit
Dienst läuft, aber nicht erreichbar Firewall, Port, Bind-Adresse, Netzwerk
Port bereits belegt anderer Prozess nutzt denselben Port
Dienst nach Boot nicht gestartet Autostart nicht enabled
Dienst kann Datei nicht lesen Rechteproblem
Dienst findet Datei nicht falscher Pfad
Dienst bricht nach Änderung ab Konfigurationsfehler
System langsam CPU, RAM, I/O oder Prozesslast prüfen

Sichere Arbeitsweise bei Dienständerungen

Vor Änderung:

aktuelle Konfiguration sichern

Dokumentation prüfen

Wartungsfenster beachten

aktive Verbindung berücksichtigen

Während Änderung:

Syntax prüfen,
falls möglich

Dienst reload statt restart nutzen,
wenn ausreichend

Nach Änderung:

systemctl status prüfen

journalctl -u prüfen

Funktion testen

Rollback bereithalten

Merksatz:

Dienständerungen immer prüfbar und rückgängig planbar machen.

Typische Prüfungsfragen

Frage Kurzantwort
Was ist ein Prozess? laufendes Programm
Was ist eine PID? eindeutige Prozess-ID
Was ist ein Dienst? Hintergrundprogramm mit Aufgabe
Was ist ein Daemon? Hintergrundprozess
Was macht ps? Prozesse anzeigen
Was macht top? Prozesse live überwachen
Was macht kill? Signal an Prozess senden
Was macht systemctl? systemd-Units verwalten
Was bedeutet active? Dienst läuft
Was bedeutet inactive? Dienst läuft nicht
Was bedeutet failed? Dienst ist fehlgeschlagen
Was bedeutet enabled? Autostart aktiv
Was bedeutet disabled? Autostart nicht aktiv
Was macht journalctl -u? Logs einer Unit anzeigen

Typische Prüfungsfallen

Falle Richtig denken
Programm und Prozess gleichsetzen Programm ist Datei, Prozess läuft
kill immer als hartes Beenden verstehen kill sendet Signale, Standard ist TERM
kill -9 sofort verwenden erst sauber beenden
Dienst läuft = erreichbar Firewall, Port und Bind-Adresse prüfen
enable mit start verwechseln enable ist Autostart, start ist jetzt
disable mit stop verwechseln disable entfernt Autostart, stop stoppt jetzt
Logs nicht prüfen journalctl -u ist zentral
reload und restart gleichsetzen reload lädt Konfiguration, restart startet neu
SSH unvorsichtig neu starten Remote-Zugriff kann abbrechen
Portproblem nur am Dienst suchen auch Firewall und Bind-Adresse prüfen

IHK-sichere Kurzformulierung

Ein Prozess ist eine laufende Instanz eines Programms und besitzt eine eindeutige Prozess-ID, die PID. Dienste sind Hintergrundprogramme, die System- oder Netzwerkfunktionen bereitstellen, zum Beispiel SSH, Webserver oder Datenbanken. Auf vielen Linux-Systemen werden Dienste mit systemd verwaltet. Das Werkzeug systemctl dient zum Starten, Stoppen, Neustarten, Aktivieren und Prüfen von Diensten. active bedeutet, dass ein Dienst läuft, enabled bedeutet, dass er beim Systemstart automatisch gestartet wird. Bei Dienstproblemen sollten systemctl status, journalctl -u, offene Ports, Rechte, Konfiguration und Abhängigkeiten geprüft werden. Ein laufender Dienst ist nicht automatisch von außen erreichbar, weil Firewall-Regeln, Bind-Adresse und Netzwerkpfade ebenfalls passen müssen.


Merksätze

Prozess = laufendes Programm.

Programm = Datei auf dem System.

PID = Prozess-ID.

PPID = Elternprozess-ID.

Dienst = Hintergrundprogramm mit Aufgabe.

Daemon = Hintergrunddienst.

ps zeigt Prozesse.

top zeigt Prozesse live.

htop ist komfortabler,
falls installiert.

kill sendet Signale.

TERM beendet sauber.

KILL beendet hart.

kill -9 nur im Notfall.

systemd verwaltet Dienste und Systemstart.

systemctl verwaltet systemd-Units.

.service steht für Dienst.

status prüft Dienstzustand.

start startet jetzt.

stop stoppt jetzt.

restart startet neu.

reload lädt Konfiguration neu.

enable aktiviert Autostart.

disable deaktiviert Autostart.

active heißt:
läuft gerade.

enabled heißt:
startet beim Boot.

Dienst läuft heißt nicht automatisch:
Port erreichbar.

127.0.0.1 heißt:
nur lokal.

0.0.0.0 heißt:
alle IPv4-Interfaces.

journalctl -u zeigt Dienstlogs.

Dienstfehler mit Status,
Logs,
Ports,
Rechten,
Konfiguration
und Abhängigkeiten prüfen.