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 …
Inhaltsverzeichnis
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 Übersetzungsfehler. 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.
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. Der hier verwendete deutsche Text erschien zuerst auf BlogLinux Lizenz: CC BY-SA 4.0
Verfasst von ikoch
Noch keine Reaktion