【发布时间】:2014-01-17 11:17:39
【问题描述】:
我从不同的资料中了解到,对于将成为守护进程的进程,通常要做的事情是将 STDIN、STDOUT、STDERR 重定向到 /dev/null,以防止守护进程向控制台发送垃圾邮件,这非常有意义.
我很好奇为什么将它们重定向到 null,而您可以关闭它们。这有什么原因吗?
谢谢!
【问题讨论】:
标签: linux unix daemon file-descriptor
我从不同的资料中了解到,对于将成为守护进程的进程,通常要做的事情是将 STDIN、STDOUT、STDERR 重定向到 /dev/null,以防止守护进程向控制台发送垃圾邮件,这非常有意义.
我很好奇为什么将它们重定向到 null,而您可以关闭它们。这有什么原因吗?
谢谢!
【问题讨论】:
标签: linux unix daemon file-descriptor
如果你只是关闭它们:
新文件描述符获得尽可能低的描述符编号。如果 fd 0/1/2 关闭,您创建的新套接字或打开的文件将分配给这些 fd。这意味着您有可能将应该转到标准输出的内容转储到该套接字或文件上。
打印到 stdout 的意外 printfs 等,或由于某种原因尝试从 stdin 读取会失败,并且如果您的程序尝试对不存在的文件描述符进行操作,它可能会退出。
【讨论】:
关闭后,
调用 open(2) 会创建另一个文件描述符,它可能会替换 STDIN、STDOUT、STDERR。 (有意或无意);有些程序使用dup2(2)来获得类似的效果,而不是使用close + open。
如果没有open(2),读取/写入 STDIN、STDOUT、STDERR 可能会导致错误。根据程序对此类错误的反应,程序将退出。
【讨论】: