我一直在寻找创建Unixdæmons,似乎有两种方法。在搜索时似乎出现的冗长的一个是再次拨打fork()
,setsid()
,fork()
,chdir()
到安全的地方,设置umask()
最后,close()
stdin
,stdout
和stderr
。
然而,运行man daemon
会显示有关daemon()
函数的信息,该函数似乎与上面的内容完全相同。这两种方法之间是否有任何差异,或daemon()
只是一个与冗长方法做同样事情的便利函数?是否有一个更好,特别是对于新手C程序员?
答案 0 :(得分:20)
daemon
函数未在POSIX中定义,因此其实现(如果有)在不同平台上的行为可能不同。
在使用glibc的Linux上,daemon
只执行一个fork,可选chdir
s(但仅限于/
,您不能指定路径),不会触及{{1}并且不会关闭umask
描述符(它可以选择将它们重新打开到std*
)。 (source)
所以它取决于平台,并且至少有一个实现比你做的要少。如果您需要所有正在做的事情,请坚持下去(或坚持/dev/null
函数完全相同的平台。)
答案 1 :(得分:2)
请注意,daemon
不符合任何标准。更好地使用标准符合函数(如POSIX定义的fork
和setsid
)。
答案 2 :(得分:1)
守护进程调用总结了冗长的fork过程,我不记得任何执行任何更多的实现。
由于守护进程()是一个高级概念,因此它绝对是新手和有经验的程序员的首选。