Ho cercato di creare i demoni Unix e sembrano esserci due metodi. Il prolisso uno, che sembra venire su durante la ricerca è quello di chiamare fork()
, setsid()
, fork()
ancora una volta, chdir()
al sicuro da qualche parte, impostare umask()
e, infine, close()
stdin
, stdout
e stderr
.Qual è la differenza tra chiamare daemon() e chiamare fork(), setsid(), fork(), ecc.?
In esecuzione man daemon
, tuttavia, vengono visualizzate le informazioni su una funzione daemon()
, che sembra fare tutte le stesse cose come sopra. Ci sono differenze tra i due approcci oppure è daemon()
solo una funzione di convenienza che fa la stessa cosa del metodo prolisso? È uno migliore, soprattutto per un programmatore C principiante?
Lasciare i descrittori di file 0, 1 e 2 aperti a '/ dev/null' è preferibile chiuderli, perché altrimenti i file successivi che il demone si apre (file di registro, socket, ...) otterranno quei descrittori di file - quali potrebbe morderti, diciamo quando una libreria che stai chiamando decide di scrivere un errore su 'stderr' ... – caf
Buona chiamata sui descrittori non di chiusura 0, 1 e 2. –