Is there a good reason to write my own daemonize function instead of using daemon(3)?

与世无争的帅哥 提交于 2019-12-01 05:13:52

问题


There are a lot of example implementations of daemons on the net. Most that I saw do not use the daemon(3) function to run the program in the background. Is that just a matter of taste, ignorance, or is there a good reason to write my own daemonize function? Is there a specific disadvantage in using daemon(3)? Is it insecure?


回答1:


The BSD daemon() function is very limited and invites misuse. Only very few daemons may use this function correctly.

The systemd man pages have a list of what a correctly written SysV daemon should do when daemonizing:

http://0pointer.de/public/systemd-man/daemon.html




回答2:


The daemon() function was not historically available in all flavors of Unix, so a lot of "portable" code doesn't use it. There's really no reason to roll your own recipe as long as all the target platforms you care about have daemon().




回答3:


There is no daemon function in POSIX. It's a vendor extension. Thus anyone writing portable code simply writes their own.




回答4:


If you don't like any of the standard daemon() function actions, you might write your own. You can control whether it switches to the root directory; you can control whether it reconnects the standard I/O channels to /dev/null. But if you want to keep stderr open to a log file, while reconnecting stdin and stdout to /dev/null, you have to decide whether to use daemon() with appropriate options followed by other code is better than rolling your own.

There isn't much rocket science in daemon(); it calls fork() and setsid() (according to the Linux version; the MacOS version mentions suspending SIGHUP while daemon() is operating). Check out the standard resources for more information on daemonization — for example:

  • W. Richard Stevens, Bill Fenner, Andrew M. Rudoff UNIX® Network Programming, Vol 1: The Sockets Networking API, 3rd Edn

  • Marc J Rochkind Advanced Unix Programming, 2nd Edn



来源:https://stackoverflow.com/questions/3720439/is-there-a-good-reason-to-write-my-own-daemonize-function-instead-of-using-daemo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!