6
A
回答
2
因爲在UNIX上最常用的功能之一是在進程之間管道流 - 如果設置了CLOEXEC標誌(子進程不能繼承文件描述符,例如:STDOUT_FILENO),則不能這樣做。
並且不,你不能在exec之後使用繼承的文件描述符(例如:標準流)。只要知道它的值(它是一個整數),您也可以使用任何繼承的文件描述符。這個值經常傳遞給子過程的參數(相當多的UNIX程序做到這一點),或者你可以做到這一點使用你選擇的任何IPC(進程間通信)機制的任何其他方式。
3
文件描述符可以使用通過exec
調用;例如,Unix工具如何從shell獲得它們的標準輸入/輸出/錯誤fds。
關閉-ON-EXEC不是默認,因爲POSIX standard(和Unix傳統)要求相反的行爲:
文件描述符調用的進程映像開放應保持新的進程映像開放,除了對於那些設置了執行近距離執行標誌
FD_CLOEXEC
的人員。
0
我不介意對此做出更完整的回答,但很容易猜測它是爲了向後兼容。必須在某個時候推出關閉執行標誌。在此之前存在的代碼不知道它,並且除非改變,否則將無法正常工作。因此它默認關閉。
不幸的是,由於這個原因,一個守護進程分叉cgi可能會使監聽套接字打開,並且如果cgi沒有退出或關閉它,守護進程將無法重新啓動。所以我同意你的看法,這不是一個很好的默認設置。
相關問題
- 1. 什麼是默認的PHP配置?
- 2. 爲什麼AllowPartiallyTrustedCallers不是默認值?
- 3. 什麼是cmake的默認構建配置
- 4. SQL:爲什麼varchar(50)是默認值?
- 5. 爲什麼UIBarButtonItem默認是禁用的?
- 6. mousedown的默認行爲是什麼?
- 7. 什麼是PHImageRequestOptionsResizeMode默認值?
- 8. UnityContainer:什麼是默認lifetimemanager
- 9. 什麼是默認goroutine?
- 10. 什麼是默認的TransformerFactory?
- 11. 什麼是默認的MaxPoolSize?
- 12. 爲什麼不將此路線設置爲默認操作?
- 13. 爲什麼不把ignoreDupResponse默認設置爲true在A4J
- 14. 爲什麼jgit默認
- 15. 爲什麼不讓*默認讓?
- 16. ipcalc - 爲什麼不能默認
- 17. 將NSToolbar重置爲默認配置
- 18. vagrant默認配置
- 19. Java爲什麼默認的java版本是1.7,而不是1.8
- 20. 爲什麼我的向量<int>不是默認爲0?
- 21. 爲什麼SET XACT_ABORT不是默認行爲?
- 22. 什麼是設置enterkey爲默認文本框
- 23. 什麼是「self.default =默認,如果默認其他類型()」是什麼意思?
- 24. 爲什麼$ http不會設置默認標題?
- 25. Django如何配置爲不使默認字段不爲空?
- 26. 爲什麼Reduux在Redux中默認稱爲默認值?
- 27. -server「默認」是配置文件
- 28. 默認的默認構造函數,爲什麼不是用戶提供的默認構造函數?
- 29. 爲什麼Eclipse中保持默認我的運行配置爲Javabean的?
- 30. 爲什麼android studio默認使用Gradle 2.14.1而不是最新?
除輸入/輸出/錯誤fds之外是否還有其他用例? – 2012-03-06 12:43:49
分叉不是可執行的,但。 – 2012-03-06 12:48:14
糟糕,腦屁。那麼,在現代炮彈中支持任意的fd重定向,這必須是有理由引入的;儘管我從未發現自己有用。 – 2012-03-06 12:48:34