我在不同的消息来源中读到,对于将成为守护进程的进程,常见的做法是将STDIN,STDOUT,STDERR重定向到/ dev / null,以防止守护进程向控制台发送垃圾邮件,这非常有意义
我很好奇为什么要将它们重定向为null,当你可以关闭它们时。有什么理由吗?
谢谢!
答案 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可能会导致错误。根据程序对此类错误的反应,程序将退出。