Co to jest demon?

12

Słyszę wiele dyskusji na temat Daemonów działających na moim komputerze Ubuntu - czym one są?

Marco Ceppi
źródło

Odpowiedzi:

15

Krótko mówiąc, demon jest procesem działającym w tle .

Demony mogą być zwykłymi programami działającymi w tle, jednak większość z nich jest tworzona przez uruchomienie procesu, rozwidlenie go i wyjście z rodzica.

Rozwidlenie procesu oznacza utworzenie jego dokładnej kopii. Proces macierzysty tego procesu, jeśli prawdziwy rodzic natychmiast zakończy działanie, jest teraz procesem init/sbin/init , który jest pierwszą rzeczą uruchomioną w każdym systemie operacyjnym podobnym do Uniksa. Teraz proces nazywa się Demonem, nie ma z nim powiązanego TTY.

Oto przykład Daemona w Pythonie:

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!"

Mówiąc wprost, to jeszcze nie jeden. Trzeba będzie również zmienić bieżący katalog roboczy, zobrazować standardowe wejście i wyjście w plikach dziennika i tak dalej. Możesz przeczytać o krwawych szczegółach w tym artykule na Wikipedii .

Jeśli uruchomisz przykład, zauważysz, że po dwóch sekundach zostanie wydrukowany, nawet jeśli proces rozpoczęty w wierszu poleceń został zakończony. Kopia tego procesu jest teraz uruchamiana „przez” init.

Stefano Palazzo
źródło
8
aby rozwinąć tę kwestię, jeśli korzystasz z systemu Linux z systemu Windows, możesz myśleć o demonach jako o * nix odpowiedniku „usług” systemu Windows.
nathwill
1
@ stefano-palazzo Powiedziałeś „… nie ma z nim powiązanego TTY”, ale potem „… zauważysz, że po dwóch sekundach drukuje…”. Myślałem, że odłączenie TTY oznacza, że ​​nie możesz pisać na terminalu.
Jorge Bucaran
1
@JorgeBucaran Tak. Drukowanie jest trochę niegrzeczne. Może nadal mieć uchwyt standardowego strumienia wyjściowego tty, który go uruchomił. Kiedy otwierasz plik (jak / dev / stdout), dostajesz liczbę (zwaną deskryptorem pliku) i to wszystko, czego potrzebujesz, aby napisać do niego, dopóki proces, który go otworzył, nadal działa (widać otwarte pliki w /proc/*/fd). Dobrze wychowany demon całkowicie odłączy się od tty, rezygnując z uchwytów na stdout, stderr i stdin.
Stefano Palazzo
1
@StefanoPalazzo Rozumiem. Można zachować odniesienie do std / out / err procesu rodzica i nadal się od niego odłączać. Jeśli mogę dowolnie zachować odniesienie do TTY, to co to znaczy odłączyć proces? Uznałem, że < superuser.com/questions/178587/… > jest użyteczny, ale nadal czuję się niejasny.
Jorge Bucaran
1
@JorgeBucaran oznacza zastąpienie własnego procesu stdio (np. Za pomocą dup2 ) nowymi, utworzonymi przez siebie (jak plik dziennika). Oto pełny przykład
Stefano Palazzo
1

W wielozadaniowych komputerowych systemach operacyjnych demon jest programem komputerowym, który działa jako proces w tle, a nie pod bezpośrednią kontrolą użytkownika interaktywnego. Tradycyjnie nazwy procesów demona kończą się na literę d, aby wyjaśnić, że w rzeczywistości proces jest demonem, i dla odróżnienia demona od normalnego programu komputerowego. Na przykład syslogd to demon, który implementuje funkcję rejestrowania systemu, a sshd to demon obsługujący przychodzące połączenia SSH.

Jak widać warstwę Daemona

Fares Younis
źródło
2
skąd cytat?
Zanna,