2012-03-22 92 views

回答

4

您不一定必須關閉標準輸出/錯誤,但您必須確定守護進程(和子進程)要寫入的位置。將輸出重定向到日誌文件是常見操作。

需要關閉標準輸入,以便守護程序(和/或子)不會卡住,試圖從用戶讀取某些輸入。

但是,如果您要使用setsid()從控制TTY中分離出守護進程,則標準輸入/輸出/錯誤將爲無效

+0

所以基本上只是因爲守護進程不是交互式的?沒有其他特殊原因嗎? – 2012-03-26 01:02:35

+0

與控制終端分離,在它自己的會話中,守護進程不會對用戶會話關閉,作業控制,CTRL-C等敏感。 – ydroneaud 2012-03-26 10:40:57

+0

酷,這就是我的想法。乾杯 – 2012-03-30 01:12:34

6

不僅stdin,stdout和stderr應該關閉,但所有打開的文件。

從「UNIX環境高級編程」,理查德·史蒂文斯,艾迪 - Weseley,18日印刷,1999年,頁417。

不需要的文件描述符應該被關閉。這可以防止守護進程保持打開可能從其父進程繼承的任何描述符(可能是shell或其他進程)。

Stevens先生的建議是獲取最大文件描述符並關閉所有文件直到該值。

引用的章節是關於'守護進程'。請注意,在編寫守護進程時,關閉文件描述符只有五分之一。

相關問題