我一直在寻找创建Unix守护进程,似乎有两种方法。在啰嗦一句,这似乎拿出搜索时,为再次调用fork()
,setsid()
,fork()
,chdir()
到安全的地方,设置umask()
,最后close()
stdin
,stdout
和stderr
。调用守护进程()和调用fork(),setsid(),fork()等有什么区别?
但是,运行man daemon
会提示有关daemon()
函数的信息,这似乎与上面所做的内容完全相同。这两种方法之间有什么不同吗?或者daemon()
只是一个方便的功能,它和冗长的方法做同样的事情?是一个更好的,特别是对于新手C程序员?
将文件描述符0,1和2打开到'/ dev/null'比关闭它们要好,因为否则守护程序打开的下一个文件(日志文件,套接字,...)将获得这些文件描述符 - 可能会咬你,说当你打电话的某个库决定写一个错误到'stderr' ... – caf
好的调用不关闭描述符0,1和2。 –