I've been looking at creating Unix dæmons, and there seem to be two methods. The long-winded one, which seems to come up when searching is to call fork()
, setsid()
, fork()
again, chdir()
to somewhere safe, set umask()
and, finally, close()
stdin
, stdout
and stderr
.
Running man daemon
, however, brings up information on a daemon()
function, which seems to do all the same stuff as above. Are there any differences between the two approaches or is daemon()
just a convenience function that does the same thing as the long-winded method? Is either one better, especially for a novice C programmer?
The
daemon
function is not defined in POSIX, so its implementation (if any) could behave differently on different platforms.On Linux with glibc,
daemon
only does one fork, optionallychdir
s (but only to/
, you can't specify a path), does not touchumask
, and does not close thestd*
descriptors (it optionally reopens them to/dev/null
though). (source)So it depends on the platform, and at least one implementation does less than what you do. If you need all of what you're doing, stick with that (or stick to a platform where the
daemon
function does exactly that).Note that
daemon
is not conforming to any standard. Better use standard conforming functions (like POSIX-definedfork
andsetsid
).The daemon call summarizes the long-winded fork procedure, and I don't recall any implementation that does anything more.
Since daemon() is a high-level concept, it's definitely to be preferred for novice and experienced programmers.