Nein, natürlich nicht!
Aber was sind dann diese daemons
? Es handelt sich dabei um (Hintergrund-)Prozesse! Und was das ist schauen wir uns unten genauer an …
Bild von Waldkunst auf Pixabay
Begriffserklärung
Viele Linux-Anfänger werden etwas nervös, wenn sie erfahren, dass auf ihrem Rechner ein “Dämon” aktiv ist. Ruhig durchatmen und entspannen - es ist alles OK! Es handelt sich um ein “dienstbares” Programm um den Benutzer zu entlasten, das ohne besonders gerufen worden zu sein, im Hintergrund Aufgaben übernimmt.
Aber was hat das mit einem “Dämon” zu tun? Nichts, rein gar nichts! Einen daemon
in deutscher Übersetzung als “Dämon” zu bezeichnen ist m. E. ein reiner Übersetzungsfehler1. Es erscheint so logisch daemon = Dämon, aber denken wir doch mal kurz an unseren Englischunterricht zurück. Damals haben wir gelernt, das englische Wort für Dämon ist ‘demon’. Nanu, da fehlt ja ein ‘a’ - richtig!
Die Wörter ‘daemon’ und ‘demon’ bedeuten im Englischen eben nicht dasselbe. Das daemon
ist die lateinisierte Version des altgriechischen δαίμων (daímōn). In der griechischen Mythologie ist ein Daimon ein den Menschen begleitender Geist, der ständig da ist und den Menschen unterstützt. Ein “dienstbarer Geist” sozusagen. Der demon
ist der “böse Geist”, der im Deutschen “Dämon” heißt.2
Bei den meisten Linux-Projekten wird der “dienstbare Geist” im Deutschen schlicht als “Dienst” bezeichnet. Er ist damit auch der in der Windows-Welt verwendeten Bezeichnung “Systemdienst” angenähert. Ich werde ihn daher ab jetzt auch durchgängig als “Dienst” bezeichnen.
Was ist bei Linux ein Dienst?
Dienste arbeiten hart im Hintergrund, damit der Benutzer entlastet wird. Stellen Sie sich vor, Sie schreiben an einem Artikel, einem Blog-Beitrag oder einem Buch. Es ist doch nett, wenn Sie sich darauf konzentrieren können und nicht manuell den Druckerdienst und die Netzwerkdienste starten und überwachen müssen.
Ein Dienst ist ein Werkzeug, das leise im Hintergrund läuft und bestimmte Bereiche des Systems überwacht und steuert, damit das Gesamtsystem richtig läuft. Ein Drucker-Dienst überwacht und steuert die Druckerkommunikation. Ein Netzwerkdienst überwacht und steuert die Netzwerkkommunikation, und so weiter.
Dienste führen gewisse Aufgaben zu vorbestimmten Zeiten oder als Reaktion auf gewisse Ereignisse aus. Es gibt viele Dienste, die auf Linux-Systemen laufen. Jeder hat die Aufgabe über sein ganz spezielles Stück des Systems zu wachen. Da sie nicht unter der direkten Kontrolle des Benutzers stehen, sind sie praktisch unsichtbar, aber trotzdem unersetzlich. Da sie die Masse an Arbeit im Hintergrund erledigen, können sie etwas undurchsichtig wirken und eventuell ist es schwierig zu durchschauen, was sie genau tun.
Welche Dienste laufen gerade auf dem System?
Um die laufenden Dienste zu ermitteln, schauen Sie nach Prozessen, die auf den Buchstaben d
enden. Es ist unter Linux eine Konvention, dass der Name eines Dienstes auf d
endet.
Es gibt viele Möglichkeiten einen Blick auf laufende Dienste zu werfen. Sie sind in den Listen der laufenden Prozesse über ps, top
oder htop
ersichtlich. Alles nützliche Programme für ihren Zweck, aber um alle laufenden Dienste auf dem System zu sehen wird uns der Befehl pstree
besser helfen.
Der pstree
-Befehl ist ein handliches kleines Werkzeug, dass die aktuell laufenden Prozesse in Form eines Baumdiagramms zeigt. Öffnen Sie ein Terminal und geben Sie folgenden Befehl ein:
pstree
Sie sehen nun eine vollständige Liste aller laufenden Prozesse. Sie werden nicht unbedingt wissen was einige dieser Prozesse sind und was sie machen. Aber die Ausgabe von pstree
gibt einen recht guten Überblick darüber was auf dem System los ist. Und es ist viel los!
Auf dem Bildschirmfoto können wir ein paar Dienste erkennen: udisksd, gvfsd, systemd, logind und ein paar andere.
Die Liste der Prozesse war zu lang um auf den Bildschirm zu passen. Aber wir können natürlich mit der Maus oder den Pfeiltasten wieder nach oben blättern:
Exkurs: Was ist ein Prozess?
Wir haben gesagt, ein Dienst sei ein Hintergrundprozess und auch allgemein von “Prozessen” gesprochen. Aber was sind Prozesse eigentlich?
Unter einem Prozess versteht man ein Programm, das im Augenblick geladen ist und idR auch läuft. Linux unterscheidet - wie in der ganzen Unix-Welt - strikt zwischen den Begriffen “Programm” und “Prozess”. Ein Programm ist die auf Festplatte, USB-Stick, etc. gespeicherte Struktur aus Befehlen in einer Programmiersprache (bzw. auch in Maschinensprache). Zum Prozess wird das Programm dadurch, dass es gestartet und damit in den Arbeitsspeicher geladen wird. Startet man ein Programm mehrmals, ist jede Instanz des Programms ein eigener Prozess. Auch die einzelnen Reiter vieler Webbrowser sind eigene Prozesse. Jeder Prozess verfügt über eine eindeutige Nummer (die Prozess-ID; PID) über die der Prozess ansprechbar ist.
Prozesse können entweder laufen (R), schlafen (S), sie sind tot (D), angehalten (T) oder ein Zombie (Z). Zombies sind Prozesse, die eigentlich schon beendet sein sollten, aber immer noch auf irgendetwas warten. Sie können immer mal wieder vorkommen und stellen keinen Grund zur Besorgnis dar, solange sie nicht in Mengen auftreten und es sich nicht um viele Zombies mit gleichem Namen handelt. Der Status wird bei Aufruf mit ps -ax
mit den Buchstaben in Klammern angezeigt.
Linux unterscheidet drei Typen von Prozessen: Interaktive Prozesse, Stapelverarbeitungs-Prozesse und Dienste.
Interaktive Prozesse sind vom Benutzer aktiv über die Befehlszeile gestartete Prozesse.
Stapelverarbeitungs-Prozesse werden nicht direkt über die Befehlszeile gestartet und liegen in Form einer Warteschlange vor. Stellen Sie sich diese als ein “Gruppe von Aufgaben” vor, die zu einem späteren Zeitpunkt ausgeführt werden sollen. Üblicherweise, wenn die Auslastung des Systems niedrig ist. Ein Systemadministrator eines Netzwerkes kann z. B. umfangreichere Analysen des Systems über Nacht laufen lassen.
Interaktive Prozesse und Prozesse aus der Warteschlange sind keine Dienste obwohl sie auch im Hintergrund laufen und Überwachungsaufgaben erfüllen können. Der entscheidende Unterschied ist, dass diese beiden Prozessarten einen menschlichen Eingriff über irgendeinen Art von Befehl benötigen. Dienste benötigen dieses nicht.
Dienste starten und vermehren
Wir wissen nun, dass ein Dienst ein Programm ist, dass als Hintergrundprozess läuft. Es befindet sich nicht unter der direkten Kontrolle eines Benutzers. Bei Abschluss des Systemstarts erzeugt der Initialiserungsprozess die Dienste über eine Methode die “forking” genannt wird. Für den Start ist kein Terminal nötig. Man sagt daher auch “ein Dienst hat kein Terminal”. Der Befehl ps -ax
beispielsweise gibt als zugehöriges Terminal ein “?” aus.
Ich kann hier nicht allzu tief ins Detail gehen, sondern möchte nur einen kurzen Überblick geben, was beim “forking” geschieht. Auch wenn es grundsätzlich andere Methoden gäbe wird in Linux traditionell ein neuer Prozess erzeugt indem ein Bestehender kopiert wird. Auf diese Weise wird ein Kindprozess erzeugt. Anschließend wird aus dem Prozess heraus das neue Programm aufgerufen.
Der Begriff “fork” ist dabei nicht willkürlich gewählt. Er erhält seinen Namen von der Programmiersprache C. Eine der Bibliotheken, die C nutzt nennt sich Standard-Bibliothek und enthält eine Methode namens “fork”. Dieses “fork” wird verwendet um neue Prozesse zu erzeugen. Der Prozess, der “fork” aufruft wird Elternprozess des neu erzeugten Kindprozesses genannt.
Der Prozess, der die Dienste erzeugt, ist der Initialiserungsprozess (genannt init
). Er “forked” sich selbst um weitere Prozesse zu erzeugen. Auf diesem Wege wird init
zum obersten Elternprozess. Üblicherweise hat init
die Prozess-ID 1.
Es gibt noch einen weiteren Weg einen Dienst zu erzeugen. Ein beliebiger Prozess kann den Dienst als Kindprozess über “fork” erzeugen und dann selbst “sterben”. Wenn der Elternprozess stirbt wird der Kindprozess zur Waise. Waisen werden automatisch vom init
-Prozess adoptiert.
Das ist der Grund warum Dienste eine Elternprozess-ID von 1 haben. Entweder wurden sie beim Systemstart von init
erzeugt oder sie wurden später von init
adoptiert nachdem ihr Elternprozess gestorben war.
Bitte die Waisen nicht mit einem Zombie verwechseln. Bei einem Zombie hat der Kindprozess seine Aufgabe bereits erfüllt und wartet auf Rückmeldung von Elternprozess.
Beispiele für Linux-Dienste
Auch wenn ich mich wiederhole, aber die einfachst Art einen Dienst zu erkennen ist nach einem Prozess zu suchen, der auf d
endet. Im Folgenden nun ein paar Beispiel von Diensten, die auf Ihrem System laufen könnten. Sie werden sehen, dass Dienste jeweils eine bestimmt Aufgabe erfüllen.
- systemd - auf heutigen Linux-Systemen der verbreitetste init-Prozess.
- rsyslogd - dient dazu Systemmeldungen mitzuschreiben. Es ist eine neuere Version von syslogd mit zahlreichen zusätzlichen Funktionen. Er ermöglicht das mitschreiben sowohl auf lokalen Systemen als auch auf entfernten Systemen.
- udisksd - ist zuständig für das Einbinden, Formatieren, Entfernen und Abfragen von Festplatten oder USB-Laufwerken.
- logind - ein kleiner Dienst, der die Anmeldungen der Benutzer verwaltet.
- httpd - der Dienst zur Verwaltung der HTTP-Dienste. Er wird normalerweise von der HTTP-Server-Software wie z. B. Apache gestartet.
- sshd - der Dienst zum Zugriff auf einen entfernten Rechner mittels Secure Shell
- ftpd - der Dienst zum Verwalten des File Transfer Protocol (FTP).
- crond - der Dienst erledigt vom Benutzer definierte Aufgaben in frei wählbaren Zeitabständen.
Dieser Artikel ist eine zum Teil stark erweiterte Übersetzung eines Artikels von Bill Dyer und erschien zuerst auf It’s FOSS. Lizenz: CC BY-SA 4.0
-
Ich will natürlich nicht bestreiten, dass auch das Wort
demon
sich von dem altgriechischen Daimon ableitet. Im 16. Jahrhundert haben sich aber bewusst die beiden Schreibweisen mit unterschiedlichen Bedeutungen herausgebildet (vgl. hier ). Auch ist das Konzept der Daimones in der griechischen Mythologie deutlich komplexer als hier von mir dargestellt. Interessierten sei der engl. Wikipedia-Artikel als Einstieg hierzu empfohlen. Da die Übersetzung vondaemon
als “Dämon” leider weit verbreitet ist, denke ich, dass es erforderlich ist, meine Aussage hier entsprechend zu belegen: Sowohl der Grammarist als auch die Seite differencebetween erläutern die Bedeutungen in der englischen Sprache ausführlich. Eine Internetsuche nach “daemon vs demon” bringt noch einige Seiten mit ähnlichen Erklärungen. Auch im “Oxford Learners Dictionary” OALD verfügen beide Worte über einen Eintrag. Derdemon
ist “an evil spirit” während derdaemon
dagegen “a creature in stories from ancient Greece that is half man and half god” ist. Auch der oben verlinke Artikel zum “daimon” der englischen Wikipedia differenziert entsprechend. Die englischsprachigen Quellen sprechen eindeutig von zwei unterschiedlichen Worten mit entsprechend unterschiedlichen Bedeutungen im Englischen. Ich will aber nicht verschweigen, dass das deutsche PONS-Wörterbuch behauptet, dass es sich beidaemon
lediglich um eine veraltete Schreibweise vondemon
handelt. Auch die deutsche (nicht aber die englische) Ausgabe der Wikipedia behauptet ohne einen Beleg zu nennen, dassdaemon = demon = Dämon
sei. Wer was anderes behauptet sei einfach ein Idiot (auch wenn dort “Nerd” steht, aber es wird schon klar). Ich habe mich dann auch gefragt, ob das Wort “Daimon” im Deutschen hinreichend verbreitet ist, dass man es als Übersetzung verwenden kann. Nach einer (zugegeben oberflächlichen) Literaturrecherche wird das Wort aber nur fachsprachlich bei Themen zur griechischen Mythologie verwendet. Auch der Duden hat keinen eigenen Eintrag. “Daimon” wird nur im Eintrag zu “Dämon” erwähnt. Hier wird die Herleitung zu Dämon über “Daemon” und die unterschiedliche Wortbedeutung von “Daimon” erwähnt. Das Wort “Daimon” existiert im Deutschen daher m. E. allgemeinsprachlich nicht, so dass sich eine entsprechende Übersetzung erübrigt. Die Übersetzung mit “Dienst” hat sich inzwischen auch durchgesetzt. Sowohl z. B. das KDE-Projekt als auch Gnome verwenden diese. In den 90ern und zu Anfang des Jahrtausends hat man oft noch die Übersetzung als “Dämon” vorgefunden. So z. B. in dem Buch “Das Buch - Linux Edition 2000” (ISBN 3-8155-0175-X) auf den Seiten 370ff und auch in SuSe-Dokumenten aus den 90ern. Inzwischen scheint sich aber das Missverständnis herumgesprochen zu haben und der Begriff “Dämon” ist in neueren Publikationen (fast) ganz verschwunden. ↩︎ -
Gelegentlich wird auch behauptet, dass
daemon
eine Abkürzung für “Disk And Executive Monitor” sei. Das ist jedoch nicht richtig. Das Wortdaemon
wird seit 1963 für Hintergrundprozesse in der EDV verwendet. Die Namensgeber hatten aber keine Abkürzung im Sinn sondern “Maxwells Daemon” wie man hier nachlesen kann. ↩︎