爲什麼在寫入(unix)守護進程時需要關閉標準輸入/輸出/錯誤?爲什麼在編寫守護進程時需要關閉標準輸入/輸出/錯誤?
4
A
回答
4
您不一定必須關閉標準輸出/錯誤,但您必須確定守護進程(和子進程)要寫入的位置。將輸出重定向到日誌文件是常見操作。
需要關閉標準輸入,以便守護程序(和/或子)不會卡住,試圖從用戶讀取某些輸入。
但是,如果您要使用setsid()
從控制TTY中分離出守護進程,則標準輸入/輸出/錯誤將爲無效。
6
不僅stdin,stdout和stderr應該關閉,但所有打開的文件。
從「UNIX環境高級編程」,理查德·史蒂文斯,艾迪 - Weseley,18日印刷,1999年,頁417。
不需要的文件描述符應該被關閉。這可以防止守護進程保持打開可能從其父進程繼承的任何描述符(可能是shell或其他進程)。
Stevens先生的建議是獲取最大文件描述符並關閉所有文件直到該值。
引用的章節是關於'守護進程'。請注意,在編寫守護進程時,關閉文件描述符只有五分之一。
相關問題
- 1. 使lftp寫入標準輸出而不必先關閉進程
- 2. C# - 如何在進程退出時關閉標準輸入和輸出流?
- 3. Docker守護進程需要什麼?
- 4. 寫入輸出流3(標準輸出或標準錯誤)
- 5. 關閉標準輸入輸出和錯誤的ptunnel方式
- 6. 需要在Qt中爲Symbian/S60編寫服務/守護進程
- 7. python守護進程不記錄標準輸出重定向
- 8. 重新連接運行的守護進程到標準輸出
- 9. 爲什麼WriteFile在寫入標準輸出時崩潰?
- 10. 什麼是dbus守護進程,爲什麼vlc需要它
- 11. 我應該需要什麼節點JS標準輸入和標準輸出
- 12. 爲什麼在寫入標準輸出時,PHP-FPM爲前綴寫入警告?
- 13. 在Python守護進程中維護日誌記錄和/或標準輸出/ stderr
- 14. 同時讀取子進程標準輸出和標準錯誤
- 15. 爲什麼在多線程時關閉標準輸出緩衝區?
- 16. C#關閉標準輸出
- 17. 爲什麼父進程的標準輸入在關閉分叉子進程的標準輸入文件描述符後仍然接受輸入?
- 18. Python運行守護進程子進程和讀取標準輸出
- 19. 包括標準輸入輸出錯誤
- 20. Linux的標準輸入,標準輸出,標準錯誤
- 21. 的boost ::進程寫入標準輸入
- 22. 寫入進程的標準輸入
- 23. 關於標準輸入或標準輸出的標準是什麼?
- 24. 處理守護進程的輸入和輸出
- 25. 編寫Linux守護進程時,爲什麼必須從tty中分離出來?
- 26. 寫入標準輸入和讀取標準輸出的子進程python 3.4
- 27. 爲什麼ScannerObj.hasNextInt()需要輸入輸入?
- 28. cron輸出到一個守護進程
- 29. fatal:關閉sha1文件時出錯:輸入/輸出錯誤
- 30. 爲什麼子進程標準輸出到文件是亂序寫入的?
所以基本上只是因爲守護進程不是交互式的?沒有其他特殊原因嗎? – 2012-03-26 01:02:35
與控制終端分離,在它自己的會話中,守護進程不會對用戶會話關閉,作業控制,CTRL-C等敏感。 – ydroneaud 2012-03-26 10:40:57
酷,這就是我的想法。乾杯 – 2012-03-30 01:12:34