Daemon (Hintergrundprozess)
Ein Daemon (auch Daemonprozess oder Hintergrundprozess) ist ein Programm, das im Hintergrund eines Betriebssystems läuft 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 Ausführen geplanter Aufgaben oder die Systemüberwachung.
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 für das Project MAC verwendet. Die Entwickler ließen sich von Maxwells Daemon inspirieren - einem Gedankenexperiment aus der Thermodynamik, bei dem ein imaginäres Wesen im Hintergrund arbeitet und Moleküle 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 Ausführungsweise. Während ein reguläres Programm an ein Terminal gebunden ist und endet, wenn du das Terminal schließt, löst sich ein Daemon von seinem Elternprozess und läuft völlig unabhängig weiter.
Technische Initialisierung
Die klassische Erstellung eines Daemons folgt einem definierten Muster, das als Daemonizing bezeichnet wird. Dabei durchläuft der Prozess mehrere Schritte, um sich vollständig vom Terminal und Benutzerkontext zu lösen.
- Fork: Der Prozess erstellt eine Kopie von sich selbst mit
fork() - Elternprozess beenden: Der ursprüngliche 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 führt 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 weiterläuft, 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 verändert. Früher 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 große 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 über Unit-Dateien.
Mit systemd wird das klassische Daemonizing überflüssig. Der Dienst kann als normales Programm im Vordergrund laufen - systemd übernimmt die Prozesssteuerung, Logging und Neustart bei Abstürzen automatisch.
# Daemon-Status prüfen
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 Überblick
Auf jedem Linux- oder Unix-System laufen zahlreiche Daemons, die essenzielle Systemfunktionen bereitstellen. Hier sind die wichtigsten, die du als angehender Fachinformatiker für Systemintegration kennen solltest:
| Daemon | Vollständiger Name | Aufgabe |
|---|---|---|
sshd |
Secure Shell Daemon | Ermöglicht verschlüsselte Remote-Verbindungen |
httpd / nginx |
HTTP Daemon | Stellt Webseiten bereit (Webserver) |
crond |
Cron Daemon | Führt 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 Druckaufträge |
Daemons unter Windows: Dienste
Das Windows-Äquivalent 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 ausführt:
# /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 Abstürzen 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 | Regulärer Prozess | Daemon |
|---|---|---|
| Terminal | An Terminal gebunden | Kein kontrollierendes Terminal |
| Lebensdauer | Endet mit Session | Läuft 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 für den Dauerbetrieb im Hintergrund optimiert wurde. Er arbeitet autonom, wartet auf Anfragen oder führt zeitgesteuerte Aufgaben aus - ohne dass jemand aktiv am System angemeldet sein muss.
Relevanz in der IT-Praxis
Daemons bilden das Rückgrat jeder Server-Infrastruktur. Ob Webserver, Datenbankserver oder Mail-Server - hinter jedem dieser Dienste steckt ein Daemon. Als Fachinformatiker für Systemintegration wirst du regelmäßig mit der Konfiguration und Fehlersuche bei Daemons arbeiten.
Auch für Fachinformatiker für Anwendungsentwicklung ist das Verständnis von Daemons wichtig: Backend-Anwendungen laufen häufig als Daemon, und Deployment-Prozesse erfordern das Erstellen von systemd-Unit-Dateien oder Docker-Containern, die ihrerseits Daemon-Prozesse verwalten.