2010-08-31 5 views
9

So che i daemon vengono eseguiti in background, per lo più richiedono un'interazione molto inferiore da parte dell'utente.Quali sono le differenze comportamentali tra un demone e un processo normale?

Wikipedia lists alcuni dei tipi di demoni che comunemente esistono:

  • Dissociare dal terminale di controllo
  • Diventare un leader di sessione
  • Diventare un leader del gruppo processo
  • Soggiornare in background fork e uscendo (una o due volte). A volte ciò è richiesto affinché il processo diventi leader di sessione. Permette inoltre al processo padre di continuare la sua normale esecuzione. Questo idioma viene a volte sintetizzato con la frase "fork off and die"
  • Impostazione della directory root ("/") come directory di lavoro corrente in modo che il processo non conservi alcuna directory in uso che potrebbe trovarsi su un file system montato (permettendo che sia smontato).
  • Cambiare la umask a 0 per consentire open(), creat(), et al. chiama per fornire le proprie maschere di autorizzazione e non dipende dalla umask del chiamante
  • Chiude tutti i file aperti ereditati al momento dell'esecuzione che vengono lasciati aperti dal processo padre, inclusi i descrittori di file 0, 1 e 2 (stdin, stdout, stderr). I file richiesti verranno aperti in seguito.
  • Utilizzando un file di log, la console, o/dev/null come stdin, stdout e stderr

Voglio sapere se ci possono essere differenze di comportamento in un demone come differenziato da un processo normale, a parte quello che ho menzionato nella prima riga. Entrambi i tipi di processi svolgono il loro lavoro e interagiscono con l'utente in base alla quantità di interazione di cui hanno bisogno per svolgere il proprio lavoro.

C'è altro daemon?

risposta

18

Non proprio. Un daemon è solo un termine per un processo che viene eseguito continuamente e di solito non è collegato a un terminale.

I demoni non sono una classe separata di processi e non hanno privilegi o attributi speciali.

C'è una funzione BSD/Linux C chiamata daemon (man page), ma questo è davvero un modo semplice per staccare il processo dal suo terminale. È così chiamato perché è quello che fanno i daemon di solito, non il contrario.

+2

quindi se eseguo un processo da una shell come '$ process &', qualifica come demone? – Lazer

+3

Direi di no: è solo un processo in background. È ancora associato al tuo terminale, anche se l'output viene temporaneamente soppresso e se il programma viene eseguito a tempo indeterminato, probabilmente è stato scritto pensando all'interattività. Un demone si stacca automaticamente dal terminale in cui è avviato e viene scritto con l'aspettativa di non-interattività. –

1

la questione è un po 'vago, ma ci proverò comunque:

Tecnicamente, i demoni sono solo processi come qualsiasi altro. Solitamente, ma non sono obbligatori, i descrittori di file misc sono chiusi e altri comportamenti adatti a processi che vivono a lungo. Per uno sguardo di alto livello sulla configurazione della maggior parte dei processi daemon (in Python), consulta: http://www.noah.org/wiki/Daemonize_Python

Quindi le differenze arrivano davvero al ciclo di vita e agli utenti. I processi demoni vivono per lunghi periodi di tempo, di solito fino a un determinato runlevel. Inoltre, di solito forniscono servizi ad altri processi a livello di sistema o processi più in alto rispetto al processo di esecuzione utente medio.

+0

Non direi che sono di solito a livello di sistema, potrebbero anche essere locali per una determinata sessione utente. – Christo

3

La differenza fondamentale tra un processo e Daemon è che un 's genitori Daemon è init - il primo processo avviato durante * Nix avvio. Ed ecco perché un demone non è connesso a un terminale. Quindi quando chiudi il tuo terminale non verrà ucciso dal sistema operativo. Ma ancora puoi inviare segnali al tuo demone .

+1

È possibile avviare o arrestare i daemon. Anche creare nuovi demoni. Non sono necessariamente avviati da init. – 0xc0de