He estado buscando crear demonios Unix, y parece haber dos métodos. El uno de largo aliento, que parece llegar cuando se busca es llamar fork()
, setsid()
, fork()
de nuevo, chdir()
a un lugar seguro, establezca umask()
y, por último, close()
stdin
, stdout
y stderr
.¿Cuál es la diferencia entre llamar a daemon() y llamar a fork(), setsid(), fork(), etc.?
Sin embargo, al ejecutar man daemon
, aparece información sobre una función daemon()
, que parece hacer las mismas cosas que antes. ¿Hay alguna diferencia entre los dos enfoques o es daemon()
solo una función de conveniencia que hace lo mismo que el método largo? ¿Es uno mejor, especialmente para un programador C novato?
Dejar los descriptores de archivo 0, 1 y 2 abiertos a '/ dev/null' es preferible a cerrarlos, porque de lo contrario los siguientes archivos que abra su daemon (archivos de registro, sockets, ...) obtendrán los descriptores de archivos, que podría morderlo, digamos cuando alguna biblioteca a la que llama decide escribir un error en 'stderr' ... – caf
Buena llamada al no cerrar descriptores 0, 1 y 2. –