Daemon (Hintergrundprozess)
Ein Daemon (auch Daemonprozess oder Hintergrundprozess) ist ein Programm, das im Hintergrund eines Betriebssystems laeuft und Dienste bereitstellt, ohne dass ein Benutzer direkt damit interagiert. Der Begriff stammt aus der Unix-Welt und beschreibt Prozesse, die automatisch starten und kontinuierlich Aufgaben erledigen - etwa das Verarbeiten von Netzwerkanfragen, das Ausfuehren geplanter Aufgaben oder die Systemueberwachung.
Du erkennst Daemons in Unix-basierten Systemen oft an der Endung d im Prozessnamen: sshd (SSH-Daemon), httpd (HTTP-Daemon), crond (Cron-Daemon) oder systemd (System-Daemon). Diese Konvention macht es einfach, Hintergrundprozesse auf einen Blick zu identifizieren.
Ursprung und Namensherkunft
Der Begriff Daemon wurde erstmals in den 1960er Jahren am MIT fuer das Project MAC verwendet. Die Entwickler liessen sich von Maxwells Daemon inspirieren - einem Gedankenexperiment aus der Thermodynamik, bei dem ein imaginaeres Wesen im Hintergrund arbeitet und Molekuele sortiert.
Genau wie Maxwells Daemon arbeiten Computer-Daemons unsichtbar im Hintergrund. Sie warten auf bestimmte Ereignisse, reagieren automatisch und verrichten ihre Arbeit, ohne dass du etwas davon mitbekommst. Das BSD-Maskottchen, der kleine Daemon mit dem Dreizack, symbolisiert dieses Konzept bis heute in der Unix-Welt.
Funktionsweise eines Daemons
Ein Daemon unterscheidet sich von normalen Programmen durch seine spezielle Ausfuehrungsweise. Waehrend ein regulaeres Programm an ein Terminal gebunden ist und endet, wenn du das Terminal schliesst, loest sich ein Daemon von seinem Elternprozess und laeuft voellig unabhaengig weiter.
Technische Initialisierung
Die klassische Erstellung eines Daemons folgt einem definierten Muster, das als Daemonizing bezeichnet wird. Dabei durchlaeuft der Prozess mehrere Schritte, um sich vollstaendig vom Terminal und Benutzerkontext zu loesen.
- Fork: Der Prozess erstellt eine Kopie von sich selbst mit
fork() - Elternprozess beenden: Der urspruengliche Prozess beendet sich
- Neue Session: Der Kind-Prozess erstellt mit
setsid()eine neue Session - Arbeitsverzeichnis: Wechsel zum Root-Verzeichnis
/ - Datei-Deskriptoren: Standard-Ein-/Ausgabe auf
/dev/nullumleiten - Endlosschleife: Der Daemon wartet auf Ereignisse oder fuehrt periodische Aufgaben aus
Durch diese Schritte wird der Daemon zum Waisenkind (Orphan Process), das automatisch vom init-Prozess (PID 1) adoptiert wird. Damit ist sichergestellt, dass der Daemon weiterlaeuft, selbst wenn sich der Benutzer abmeldet.
Init-Systeme und Daemon-Verwaltung
Die Art und Weise, wie Daemons gestartet und verwaltet werden, hat sich im Laufe der Zeit stark veraendert. Frueher verwendeten Unix-Systeme das traditionelle SysV-Init, heute dominiert systemd die meisten Linux-Distributionen.
SysV-Init (traditionell)
Das System V Init war jahrzehntelang der Standard. Daemons wurden durch Shell-Skripte in /etc/init.d/ gesteuert. Diese Skripte mussten Befehle wie start, stop und restart implementieren. Der grosse Nachteil: Dienste wurden sequentiell gestartet, was den Boot-Vorgang verlangsamt.
systemd (modern)
systemd hat das Init-System grundlegend modernisiert und ist heute bei Ubuntu, Fedora, Debian, RHEL und den meisten anderen Linux-Distributionen der Standard. Es startet Dienste parallel, beschleunigt den Boot-Vorgang erheblich und bietet eine einheitliche Konfiguration ueber Unit-Dateien.
Mit systemd wird das klassische Daemonizing ueberflluessig. Der Dienst kann als normales Programm im Vordergrund laufen - systemd uebernimmt die Prozesssteuerung, Logging und Neustart bei Abstuerzen automatisch.
# Daemon-Status pruefen
systemctl status sshd
# Daemon starten
sudo systemctl start nginx
# Daemon beim Systemstart aktivieren
sudo systemctl enable nginx
# Alle aktiven Dienste anzeigen
systemctl list-units --type=service --state=running
Wichtige Daemons im Ueberblick
Auf jedem Linux- oder Unix-System laufen zahlreiche Daemons, die essenzielle Systemfunktionen bereitstellen. Hier sind die wichtigsten, die du als angehender Fachinformatiker fuer Systemintegration kennen solltest:
| Daemon | Vollstaendiger Name | Aufgabe |
|---|---|---|
sshd |
Secure Shell Daemon | Ermoeglicht verschluesselte Remote-Verbindungen |
httpd / nginx |
HTTP Daemon | Stellt Webseiten bereit (Webserver) |
crond |
Cron Daemon | Fuehrt geplante Aufgaben zeitgesteuert aus |
systemd |
System Daemon | Verwaltet alle anderen Dienste (PID 1) |
syslogd / rsyslogd |
System Log Daemon | Sammelt und speichert System-Logs |
dhcpd |
DHCP Daemon | Vergibt IP-Adressen im Netzwerk |
ntpd / chronyd |
NTP Daemon | Synchronisiert die Systemzeit |
cupsd |
CUPS Daemon | Verwaltet Drucker und Druckauftraege |
Daemons unter Windows: Dienste
Das Windows-Aequivalent zu Unix-Daemons sind Windows-Dienste (Services). Sie laufen ebenfalls im Hintergrund, werden aber anders verwaltet. Statt systemctl verwendest du die Dienstverwaltung (services.msc) oder PowerShell-Befehle wie Get-Service und Start-Service.
Typische Windows-Dienste sind der Windows Update Service, der Print Spooler oder der Windows Defender. Das Konzept ist identisch: Programme laufen permanent im Hintergrund und stellen Systemfunktionen bereit.
Praxisbeispiel: Eigenen Daemon mit systemd erstellen
Um einen eigenen Dienst unter Linux zu erstellen, legst du eine Unit-Datei im Verzeichnis /etc/systemd/system/ an. Das folgende Beispiel zeigt einen einfachen Daemon, der ein Python-Skript als Hintergrundprozess ausfuehrt:
# /etc/systemd/system/mein-daemon.service
[Unit]
Description=Mein eigener Daemon
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/mein-daemon
ExecStart=/usr/bin/python3 /opt/mein-daemon/app.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Nach dem Erstellen der Datei aktivierst du den Daemon mit sudo systemctl daemon-reload und sudo systemctl enable --now mein-daemon. Der Dienst startet dann automatisch bei jedem Systemstart und wird bei Abstuerzen neu gestartet.
Daemon vs. Prozess: Der Unterschied
Nicht jeder Prozess ist ein Daemon. Der entscheidende Unterschied liegt in der Bindung an das Terminal und der Lebensdauer:
| Merkmal | Regulaerer Prozess | Daemon |
|---|---|---|
| Terminal | An Terminal gebunden | Kein kontrollierendes Terminal |
| Lebensdauer | Endet mit Session | Laeuft bis Systemende |
| Interaktion | Direkte Benutzerinteraktion | Keine direkte Interaktion |
| Start | Manuell durch Benutzer | Automatisch beim Systemstart |
| Elternprozess | Shell oder anderer Prozess | init/systemd (PID 1) |
Ein Daemon ist also ein spezialisierter Prozess, der fuer den Dauerbetrieb im Hintergrund optimiert wurde. Er arbeitet autonom, wartet auf Anfragen oder fuehrt zeitgesteuerte Aufgaben aus - ohne dass jemand aktiv am System angemeldet sein muss.
Relevanz in der IT-Praxis
Daemons bilden das Rueckgrat jeder Server-Infrastruktur. Ob Webserver, Datenbankserver oder Mail-Server - hinter jedem dieser Dienste steckt ein Daemon. Als Fachinformatiker fuer Systemintegration wirst du regelmaessig mit der Konfiguration und Fehlersuche bei Daemons arbeiten.
Auch fuer Fachinformatiker fuer Anwendungsentwicklung ist das Verstaendnis von Daemons wichtig: Backend-Anwendungen laufen haeufig als Daemon, und Deployment-Prozesse erfordern das Erstellen von systemd-Unit-Dateien oder Docker-Containern, die ihrerseits Daemon-Prozesse verwalten.