是否有充分的理由编写自己的守护进程函数而不是使用守护进程(3)?

时间:2010-09-15 18:08:50

标签: c linux unix daemon bsd

网上有许多守护进程的示例实现。我看到的大多数都不使用守护进程(3)函数在后台运行程序。这只是一个品味,无知的问题,还是有充分的理由来编写我自己的守护进程功能?使用守护进程(3)有特定的缺点吗?它不安全吗?

4 个答案:

答案 0 :(得分:5)

daemon()函数在各种Unix版本中都没有历史可用,所以很多“可移植”代码都不使用它。只要您关心的所有目标平台都有守护进程(),就没有理由推出自己的配方。

答案 1 :(得分:3)

BSD守护程序()函数非常有限,并且会导致滥用。只有极少数守护进程可以正确使用此功能。

systemd手册页有一个正确编写的SysV守护程序在守护进程时应该做什么的列表:

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

答案 2 :(得分:3)

POSIX中没有daemon功能。这是供应商扩展。因此,编写可移植代码的人只需编写自己的代码。

答案 3 :(得分:2)

如果您不喜欢任何标准daemon()功能操作,您可以编写自己的操作。您可以控制它是否切换到根目录;您可以控制是否将标准I / O通道重新连接到/ dev / null。但是如果你想让stderr对日志文件保持开放,同时将stdin和stdout重新连接到/ dev / null,你必须决定是否使用daemon()和适当的选项,然后使用其他代码比滚动自己更好。

daemon()中没有太多火箭科学;它调用fork()setsid()(根据Linux版本; MacOS版本提到在daemon()运行时暂停SIGHUP)。有关守护程序的更多信息,请查看标准资源 - 例如: