是否有充分的理由编写我自己的守护功能而不是使用守护程序(3)?
题
网上有很多示例实现。我看到的大多数人都不使用守护程序(3)功能在后台运行程序。这只是一个品味,无知,还是有充分的理由写我自己的功能?使用守护程序(3)是否有特定的缺点?是不安全的吗?
解决方案
BSD守护程序()功能非常有限,并引起了滥用。只有很少的守护程序可以正确使用此功能。
Systemd Man页面有一个列表,列出了守护程序时正确编写的SYSV守护程序应该做什么:
其他提示
守护程序()函数在历史上并非在UNIX的所有口味中都可用,因此许多“便携式”代码不使用它。只要您关心的是守护程序(),只要您关心的所有目标平台,就没有理由滚动自己的食谱。
没有 daemon
POSIX中的功能。这是供应商扩展。因此,任何编写便携式代码的人都可以写自己的书。
如果您不喜欢任何标准 daemon()
功能动作,您可能会写自己的作用。您可以控制它是否切换到根目录;您可以控制它是否将标准I/O通道重新连接到/DEV/NULL。但是,如果您想在将stdin和stdout重新连接到 /dev /null时,请将stderr打开到日志文件中,则必须决定是否使用 daemon()
有了适当的选项,其他代码的选择要比滚动自己更好。
没有太多的火箭科学 daemon()
;它打电话 fork()
和 setsid()
(根据Linux版本; MacOS版本提到暂停叹息 daemon()
正在运行)。查看标准资源以获取有关守护程序的更多信息,例如:
W. Richard Stevens,Bill Fenner,Andrew M. RudoffUnix®网络编程,第1卷:插座网络API,第三版
Marc J Rochkind高级UNIX编程,第二版
不隶属于 StackOverflow