Für eine optimale Darstellung aktivieren Sie bitte JavaScript.

Ist Linux von Dämonen besessen?

 ·   ·  ☕ 9 Min. Lesezeit  ·  ✍️ ikoch

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 eines Dämonen im Dark-Art-Stil
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 daemonin 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 daemonist 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 demonist 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 denden. Es ist unter Linux eine Konvention, dass der Name eines Dienstes auf dendet.

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 pstreegibt einen recht guten Überblick darüber was auf dem System los ist. Und es ist viel los!

Ergebnis des Befehls pstree Teil 1

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:

Ergebnis des Befehls pstree Teil 2

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 -axmit 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.

Pac Man Teufelchen Normaler Mann Teufelchen

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 -axbeispielsweise 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 initdie 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 initadoptiert 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 dendet. 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.
Teufelsmädchen

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


  1. Ich will natürlich nicht bestreiten, dass auch das Wort demonsich 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 von daemonals “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. Der demonist “an evil spirit” während der daemondagegen “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 bei daemonlediglich um eine veraltete Schreibweise von demonhandelt. Auch die deutsche (nicht aber die englische) Ausgabe der Wikipedia behauptet ohne einen Beleg zu nennen, dass daemon = demon = Dämonsei. 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. ↩︎

  2. Gelegentlich wird auch behauptet, dass daemoneine Abkürzung für “Disk And Executive Monitor” sei. Das ist jedoch nicht richtig. Das Wort daemonwird 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. ↩︎


ikoch
ERSTELLT VON
ikoch