我一直在寻找创建Unix守护程序的方法,似乎有两种方法。搜寻时出现的long回事似乎是再次调用fork()setsid()fork()chdir()到安全的地方,设置umask(),最后设置close() stdinstdoutstderr

但是,运行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/

10-13 09:19