2012-03-22 71 views

回答

4

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

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

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

+0

所以基本上只是因为守护进程不是交互式的?没有其他特殊原因吗? – 2012-03-26 01:02:35

+0

与控制终端分离,在它自己的会话中,守护进程不会对用户会话关闭,作业控制,CTRL-C等敏感。 – ydroneaud 2012-03-26 10:40:57

+0

酷,这就是我的想法。干杯 – 2012-03-30 01:12:34

6

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

从“UNIX环境高级编程”,理查德·史蒂文斯,艾迪 - Weseley,18日印刷,1999年,页417。

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

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

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

相关问题