为什么在编写(unix)守护进程时必须关闭标准输入/输出/错误?
答案 0 :(得分:6)
不仅要关闭stdin,stdout和stderr,还要关闭所有打开的文件。
来自“UNIX环境中的高级编程”,W。Richard Stevens,Addison-Weseley,第18期印刷,1999年,第417页。
应关闭不需要的文件描述符。这可以防止守护进程保持打开任何可能从其父级继承的描述符(可能是shell或其他进程)。
先生。史蒂文斯的建议是获取最大文件描述符并将所有文件关闭到该值。
引用的章节是关于'守护进程'。请注意,在编写守护进程时,关闭文件描述符只是一个点。
答案 1 :(得分:4)
您不必明确关闭标准输出/错误,但您必须确定您的守护程序(和子项)将要写入的位置。将输出重定向到日志文件是常见的做法。
需要关闭标准输入,以便守护程序(和/或子项)不会因尝试读取用户的某些输入而卡住。
但是如果您要使用setsid()
从控制TTY中分离守护进程,则标准输入/输出/错误将无效。