What's the difference between calling daemon() and calling fork(), setsid(), fork(), etc.? What's the difference between calling daemon() and calling fork(), setsid(), fork(), etc.? unix unix

What's the difference between calling daemon() and calling fork(), setsid(), fork(), etc.?


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, optionally chdirs (but only to /, you can't specify a path), does not touch umask, and does not close the std* 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-defined fork and setsid).


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.