Was ist ein Daemon?

12

Ich höre viel über Daemons, die auf meinem Ubuntu-Computer laufen - was sind sie?

Marco Ceppi
quelle

Antworten:

15

Kurz gesagt, ein Daemon ist ein Hintergrundprozess .

Daemons können normale Programme sein, die im Hintergrund ausgeführt werden. Die meisten werden jedoch erstellt, indem ein Prozess gestartet, gegabelt und der übergeordnete Prozess beendet wird.

Einen Prozess aufzuteilen bedeutet, eine exakte Kopie davon zu erstellen. Das übergeordnete Element dieses Prozesses ist jetzt , wenn das eigentliche übergeordnete Element sofort beendet wird, der Init- Prozess /sbin/init, der auf jedem Unix-ähnlichen Betriebssystem als erstes gestartet wird. Jetzt wird der Prozess als Daemon bezeichnet, mit dem kein TTY verknüpft ist.

Hier ist ein Beispiel für einen Daemon in Python:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

Eigentlich ist es noch keine. Sie müssten auch das aktuelle Arbeitsverzeichnis ändern, die Standardeingabe und -ausgabe auf Protokolldateien umstellen und so weiter. Sie können sich in diesem Wikipedia-Artikel über die blutigen Details informieren .

Wenn Sie das Beispiel ausführen, werden Sie feststellen, dass es nach zwei Sekunden gedruckt wird, obwohl der in der Befehlszeile gestartete Vorgang beendet wurde. Die Kopie dieses Prozesses wird jetzt von init ausgeführt.

Stefano Palazzo
quelle
8
Um dies zu erweitern: Wenn Sie von Windows zu Linux kommen, können Sie sich Daemons als das * nix-Äquivalent der "Dienste" von Windows vorstellen.
Nathanwill
1
@ stefano-palazzo Sie sagten "... es ist kein TTY zugeordnet", aber dann "... werden Sie bemerken, nach zwei Sekunden wird es gedruckt ...". Ich dachte, wenn Sie das TTY entfernen, können Sie nicht mehr an das Terminal schreiben.
Jorge Bucaran
1
@JorgeBucaran Ja. Der Druck ist etwas ungezogen. Es kann immer noch ein Handle auf den Standardausgabestream des Tty haben, von dem es gestartet wurde. Wenn Sie eine Datei öffnen (z. B. / dev / stdout), erhalten Sie eine Nummer (den so genannten Dateideskriptor), und das ist alles, was Sie schreiben müssen, solange der Prozess, der sie geöffnet hat, noch ausgeführt wird (Sie sehen) geöffnete Dateien in /proc/*/fd). Ein gut erzogener Daemon löst sich vollständig vom tty, indem er die Handles stdout, stderr und stdin übergibt.
Stefano Palazzo
1
@StefanoPalazzo Ich verstehe. Man kann einen Verweis auf den Prozess std / out / err des Elternteils behalten und sich dennoch davon lösen. Wenn ich willkürlich einen Verweis auf das TTY behalten kann, was bedeutet es dann, einen Prozess zu trennen? Ich fand < superuser.com/questions/178587/… > nützlich, fühle mich aber immer noch unklar.
Jorge Bucaran
1
@JorgeBucaran bedeutet, dass das prozesseigene STDIO (z. B. mit DUP2 ) durch das neu erstellte STDIO (wie eine Protokolldatei) überschrieben wird . Hier ist ein vollständiges Beispiel
Stefano Palazzo
1

In Multitasking-Betriebssystemen ist ein Daemon ein Computerprogramm, das als Hintergrundprozess ausgeführt wird und nicht direkt von einem interaktiven Benutzer gesteuert wird. Üblicherweise enden die Prozessnamen eines Daemons mit dem Buchstaben d, um zu verdeutlichen, dass der Prozess tatsächlich ein Daemon ist, und um zwischen einem Daemon und einem normalen Computerprogramm zu unterscheiden. Syslogd ist beispielsweise der Dämon, der die Systemprotokollierungsfunktion implementiert, und sshd ist ein Dämon, der eingehende SSH-Verbindungen bedient.

Wie Sie sehen können, die Daemon Schicht

Preise Younis
quelle
2
Woher kommt das Zitat?
Zanna