为什么在编写守护程序时需要关闭标准输入/输出/错误



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

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

摘自"UNIX环境中的高级编程",W.Richard Stevens,Addison Weseley,第18期印刷,1999年,第417页。

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

Mr。Stevens的建议是获得最大的文件描述符,并关闭所有达到该值的文件。

引用的章节是关于"守护进程"的。请注意,在编写守护进程时,关闭文件描述符仅为五分之一。

您不必肯定地关闭标准输出/error,但您必须确定您的守护进程(和子进程)要写入的位置。将输出重定向到日志文件是一种常见的做法。

关闭标准输入是必需的,这样守护进程(和/或子进程)就不会在尝试从用户读取某些输入时陷入困境。

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

最新更新