我在不同的來源中讀到,對於將成爲守護進程的進程,通常要做的事情是將STDIN,STDOUT,STDERR重定向到/ dev/null,以防止守護進程發出垃圾郵件,這是非常有意義的。UNIX守護進程處理文件描述符
我很好奇,爲什麼將它們重定向到null,當你可以關閉它們。有什麼理由呢?
謝謝!
我在不同的來源中讀到,對於將成爲守護進程的進程,通常要做的事情是將STDIN,STDOUT,STDERR重定向到/ dev/null,以防止守護進程發出垃圾郵件,這是非常有意義的。UNIX守護進程處理文件描述符
我很好奇,爲什麼將它們重定向到null,當你可以關閉它們。有什麼理由呢?
謝謝!
如果你只是關閉它們:
新文件描述符得到最低的文件描述符可能。如果fd 0/1/2關閉,則您創建的新套接字或打開的文件將分配給這些fd。這意味着你可能會傾銷應該轉到該套接字或文件上的東西。
打印到stdout或出於某種原因嘗試從stdin讀取的意外printfs等將失敗,並且如果它試圖對不存在的文件描述符進行操作,您的程序可能會退出。
結束後,
調用open(2)
創建可以possiblly更換STDIN,STDOUT另一個文件描述符,STDERR。 (故意或意外);有些程序使用dup2(2)
來獲得類似的效果,而不是使用close
+ open
。
沒有open(2)
,讀/寫STDIN,STDOUT,STDERR可能會導致錯誤。根據程序對此類錯誤的反應,程序將退出。