为什么在编写守护进程时必须关闭标准输入/输出/错误?

时间:2012-03-22 03:48:07

标签: linux unix daemon

为什么在编写(unix)守护进程时必须关闭标准输入/输出/错误?

2 个答案:

答案 0 :(得分:6)

不仅要关闭stdin,stdout和stderr,还要关闭所有打开的文件。

来自“UNIX环境中的高级编程”,W。Richard Stevens,Addison-Weseley,第18期印刷,1999年,第417页。

  

应关闭不需要的文件描述符。这可以防止守护进程保持打开任何可能从其父级继承的描述符(可能是shell或其他进程)。

先生。史蒂文斯的建议是获取最大文件描述符并将所有文件关闭到该值。

引用的章节是关于'守护进程'。请注意,在编写守护进程时,关闭文件描述符只是一个点。

答案 1 :(得分:4)

您不必明确关闭标准输出/错误,但您必须确定您的守护程序(和子项)将要写入的位置。将输出重定向到日志文件是常见的做法。

需要关闭标准输入,以便守护程序(和/或子项)不会因尝试读取用户的某些输入而卡住。

但是如果您要使用setsid()从控制TTY中分离守护进程,则标准输入/输出/错误将无效