2014-01-17 125 views
1

我在不同的來源中讀到,對於將成爲守護進程的進程,通常要做的事情是將STDIN,STDOUT,STDERR重定向到/ dev/null,以防止守護進程發出垃圾郵件,這是非常有意義的。UNIX守護進程處理文件描述符

我很好奇,爲什麼將它們重定向到null,當你可以關閉它們。有什麼理由呢?

謝謝!

回答

3

如果你只是關閉它們:

  • 新文件描述符得到最低的文件描述符可能。如果fd 0/1/2關閉,則您創建的新套接字或打開的文件將分配給這些fd。這意味着你可能會傾銷應該轉到該套接字或文件上的東西。

  • 打印到stdout或出於某種原因嘗試從stdin讀取的意外printfs等將失敗,並且如果它試圖對不存在的文件描述符進行操作,您的程序可能會退出。

1

結束後,

  • 調用open(2)創建可以possiblly更換STDIN,STDOUT另一個文件描述符,STDERR。 (故意或意外);有些程序使用dup2(2)來獲得類似的效果,而不是使用close + open

  • 沒有open(2),讀/寫STDIN,STDOUT,STDERR可能會導致錯誤。根據程序對此類錯誤的反應,程序將退出。