我一直在研究如何创建Unix守护进程,似乎有两种方法。搜索时出现的冗长方法是调用fork()
,setsid()
,再次调用fork()
,使用chdir()
切换到安全目录,设置umask()
,最后关闭stdin
、stdout
和stderr
。
然而,运行man daemon
命令会显示一个daemon()
函数的信息,它似乎做了以上所有相同的工作。这两种方法之间是否有任何区别,或者daemon()
只是一个方便的函数,可以执行与冗长方法相同的操作?对于初学者的C程序员来说,哪种方法更好呢?
/dev/null
比关闭它们更可取,因为否则你的守护进程打开的下一个文件(如日志文件、套接字等)将获得这些文件描述符。当你调用某些库来写入错误到标准错误流时,这可能会给你带来麻烦。 - caf