Che cos'è un demone?


12

Sento un sacco di discorsi sui Demoni in esecuzione sul mio computer Ubuntu - che cosa sono?

Risposte:


15

In breve, un demone è un processo in background .

I demoni possono essere solo normali programmi eseguiti in background, tuttavia la maggior parte viene creata avviando un processo, modificandolo ed uscendo dal genitore.

Forcella di un processo significa crearne una copia esatta. Il genitore di quel processo, se il genitore reale termina immediatamente, ora è il processo di init/sbin/init , che è la prima cosa avviata su ogni sistema operativo simile a Unix. Ora, il processo è chiamato Daemon, a cui non è associato alcun TTY.

Ecco un esempio di demone 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!"

Non è ancora uno, a rigor di termini. Dovresti anche cambiare la directory di lavoro corrente, immettere input e output standard in file di registro e così via. Puoi leggere i dettagli cruenti in questo articolo di Wikipedia .

Se esegui l'esempio, noterai che dopo due secondi viene stampato, anche se il processo che hai avviato sulla riga di comando è terminato. La copia di questo processo è ora avviata da "init".


8
per espanderci, se arrivate a Linux da Windows, potete pensare ai demoni come l'equivalente * nix dei "servizi" di Windows.
nathwill,

1
@ stefano-palazzo Hai detto "... non ha TTY associato", ma poi "... noterai, dopo due secondi stampa ...". Pensavo che staccare il TTY significava che non potevi scrivere al terminale.
Jorge Bucaran,

1
@JorgeBucaran Sì. La stampa è un po 'impertinente. Può ancora avere un handle per il flusso di output standard del tty che lo ha avviato. Quando apri un file (come / dev / stdout), ottieni un numero (chiamato il descrittore di file), e questo è tutto ciò che ti serve per scriverlo finché il processo che lo ha aperto è ancora in esecuzione (puoi vedere file aperti in /proc/*/fd). Un demone ben educato si staccherà completamente dal tty rinunciando agli handle per stdout, stderr e stdin.
Stefano Palazzo

1
@StefanoPalazzo vedo. Si può conservare un riferimento al processo genitore std / out / err e staccarlo comunque. Se posso arbitrariamente mantenere un riferimento al TTY, allora, cosa significa staccare un processo? Ho trovato utile < superuser.com/questions/178587/… >, ma mi sento ancora poco chiaro.
Jorge Bucaran,

1
@JorgeBucaran significa sovrascrivere i processi propri stdio (ad esempio utilizzando dup2 ) con quelli nuovi che hai creato (come un file di registro). Ecco un esempio completo
Stefano Palazzo

1

Nei sistemi operativi per computer multitasking, un demone è un programma per computer che viene eseguito come processo in background, anziché essere sotto il controllo diretto di un utente interattivo. Tradizionalmente, i nomi dei processi di un demone terminano con la lettera d, per chiarire che il processo è, in realtà, un demone e per la differenziazione tra un demone e un normale programma per computer. Ad esempio, syslogd è il demone che implementa la funzione di registrazione del sistema e sshd è un demone che serve connessioni SSH in entrata.

Come puoi vedere il livello del Demone


2
da dove viene la citazione?
Zanna,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.