UNIX守护程序处理文件描述符

时间:2014-01-17 11:17:40

标签: linux unix daemon file-descriptor

我在不同的消息来源中读到,对于将成为守护进程的进程,常见的做法是将STDIN,STDOUT,STDERR重定向到/ dev / null,以防止守护进程向控制台发送垃圾邮件,这非常有意义

我很好奇为什么要将它们重定向为null,当你可以关闭它们时。有什么理由吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

如果你关闭它们:

  • 新文件描述符可获得最低的描述符编号。如果fd 0/1/2关闭,则您创建的新套接字或打开的文件将分配给这些fd。这意味着您有可能将转储到stdout的内容转储到该套接字或文件上。

  • 打印到stdout的意外printfs等,或者由于某种原因尝试从stdin读取会失败,并且如果它尝试对不存在的文件描述符进行操作,程序可能会退出。

答案 1 :(得分:1)

关闭后,

  • 调用open(2)会创建另一个文件描述符,可能会替换STDIN,STDOUT,STDERR。 (有意或无意);有些程序使用dup2(2)来获得类似效果,而不是使用close + open

  • 如果没有open(2),读取/写入STDIN,STDOUT,STDERR可能会导致错误。根据程序对此类错误的反应,程序将退出。