我一直在寻找创建Unix守护程序的方法,似乎有两种方法。搜寻时出现的long回事似乎是再次调用fork()
,setsid()
,fork()
,chdir()
到安全的地方,设置umask()
,最后设置close()
stdin
,stdout
和stderr
。
但是,运行man daemon
会显示有关daemon()
函数的信息,该函数似乎与上述功能相同。两种方法之间是否有任何区别?或者daemon()
只是一种便捷功能,与长久以来的方法具有相同的作用?哪一种更好,特别是对于新手C程序员而言?
最佳答案
daemon
函数未在POSIX中定义,因此其实现(如果有)在不同平台上的行为可能不同。
在具有glibc的Linux上,daemon
仅执行一次派生,可以选择chdir
(但只能执行/
,您不能指定路径)),不涉及umask
,并且不关闭std*
描述符(不过可以选择将其重新打开为/dev/null
)。 (source)
因此,它取决于平台,并且至少有一种实现比您所做的要少。如果您需要做的所有事情,请坚持做下去(或坚持使用daemon
函数可以做到这一点的平台)。
关于c - 调用daemon()和调用fork(),setsid(),fork()等有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32593786/