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:

BefehlBedeutung
psProzesse der aktuellen Shell anzeigen
ps auxviele Prozesse systemweit anzeigen
ps -efProzesse in anderem verbreiteten Format anzeigen

Typische Spalten:

SpalteBedeutung
USERBenutzer, unter dem der Prozess läuft
PIDProzess-ID
%CPUCPU-Nutzung
%MEMSpeicheranteil
COMMANDgestarteter Befehl
PPIDElternprozess-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:

BefehlBedeutung
pgrep nginxsucht Prozess-IDs nach Namen
pidof nginxzeigt 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:

WertBedeutung
CPURechenleistung
RAMArbeitsspeicher
Load Averagedurchschnittliche 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

SignalNummerBedeutung
TERM15sauber beenden
KILL9sofort hart beenden
HUP1häufig Konfiguration neu laden
INT2Unterbrechung, ä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:

TastenkombinationBedeutung
Strg+Claufenden Vordergrundprozess abbrechen
Strg+ZProzess anhalten
fgangehaltenen Job in Vordergrund holen
bgangehaltenen 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:

DienstZweck
sshFernadministration
nginxWebserver
apache2Webserver
mariadbDatenbank
postgresqlDatenbank
cronzeitgesteuerte Aufgaben
systemd-journaldLogging
dockerContainerdienst

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-ArtBedeutung
.serviceDienst
.socketSocket-Aktivierung
.timerzeitgesteuerte Aufgabe
.mountMountpoint
.targetZielzustand 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:

ZustandBedeutung
activeDienst läuft
inactiveDienst läuft nicht
failedDienst ist fehlgeschlagen
enabledstartet automatisch beim Boot
disabledstartet 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:

BefehlBedeutung
restartDienst komplett neu starten
reloadKonfiguration 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

BefehlWirkung
startstartet Dienst jetzt
stopstoppt Dienst jetzt
enablestartet Dienst künftig automatisch beim Boot
disablestartet Dienst künftig nicht automatisch beim Boot
restartstoppt und startet Dienst jetzt neu
reloadlä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:

OptionBedeutung
-tTCP
-uUDP
-llistening
-pProzess anzeigen
-eerweiterte Informationen
-nnumerische 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:

TargetBedeutung
multi-user.targetMehrbenutzerbetrieb ohne grafische Oberfläche
graphical.targetMehrbenutzerbetrieb mit grafischer Oberfläche
rescue.targetRettungsmodus
emergency.targetMinimaler 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

BefehlZweck
psProzesse anzeigen
ps auxviele Prozesse anzeigen
pgrepProzesse nach Namen suchen
pidofPID eines Programms anzeigen
topProzesse live überwachen
htopkomfortabler Prozessmonitor
killSignal an Prozess senden
pkillProzess nach Namen beenden
jobsHintergrundjobs anzeigen
fgJob in Vordergrund holen
bgJob im Hintergrund fortsetzen

Typische Dienstbefehle

BefehlZweck
systemctl status dienstDienststatus prüfen
systemctl start dienstDienst jetzt starten
systemctl stop dienstDienst jetzt stoppen
systemctl restart dienstDienst neu starten
systemctl reload dienstKonfiguration neu laden
systemctl enable dienstAutostart aktivieren
systemctl disable dienstAutostart deaktivieren
systemctl enable --now dienstAutostart aktivieren und sofort starten
systemctl is-active dienstprüfen, ob Dienst läuft
systemctl is-enabled dienstprüfen, ob Autostart aktiv ist
journalctl -u dienstDienstlogs anzeigen

Typische Fehlerbilder

FehlerbildWahrscheinliche Ursache
Dienst ist inactiveDienst läuft nicht
Dienst ist failedStartfehler oder Absturz
Dienst startet nichtKonfiguration, Rechte, Port, Abhängigkeit
Dienst läuft, aber nicht erreichbarFirewall, Port, Bind-Adresse, Netzwerk
Port bereits belegtanderer Prozess nutzt denselben Port
Dienst nach Boot nicht gestartetAutostart nicht enabled
Dienst kann Datei nicht lesenRechteproblem
Dienst findet Datei nichtfalscher Pfad
Dienst bricht nach Änderung abKonfigurationsfehler
System langsamCPU, 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

FrageKurzantwort
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

FalleRichtig denken
Programm und Prozess gleichsetzenProgramm ist Datei, Prozess läuft
kill immer als hartes Beenden verstehenkill sendet Signale, Standard ist TERM
kill -9 sofort verwendenerst sauber beenden
Dienst läuft = erreichbarFirewall, Port und Bind-Adresse prüfen
enable mit start verwechselnenable ist Autostart, start ist jetzt
disable mit stop verwechselndisable entfernt Autostart, stop stoppt jetzt
Logs nicht prüfenjournalctl -u ist zentral
reload und restart gleichsetzenreload lädt Konfiguration, restart startet neu
SSH unvorsichtig neu startenRemote-Zugriff kann abbrechen
Portproblem nur am Dienst suchenauch 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.