執行子進程有沒有一種安全和簡單的方法,但不允許它訪問父文件描述符?特別是在我的情況下發生這種情況:防止子進程繼承文件描述符
父進程偵聽套接字127.0.0.1:8000。
父進程使用exec來運行子進程。這個子進程分叉並啓動一個守護進程。
父進程關閉。
守護進程現在保持打開文件描述符(一直監聽端口8000)。
也許有一些命令可以在執行子進程之前關閉所有文件描述符?
如果您從Web服務器腳本調用'service someservice start''命令,則會出現此問題。
也許有一些命令,可以在一個「乾淨」的環境中運行的服務腳本,像:
run-detached service someservice start
這將導致所有的文件描述符被關閉,環境變量被取消設置等 - 使服務運行的上下文儘可能地基本。
查看['FD_CLOEXEC'](http://man7.org/linux/man-pages/man2/fcntl.2.html) – Patrick
[你不是第一個做這個的人](http:// jdebp .eu。/ Softwares/nosh/bsd-service-command.html#Inheritance),但正確的做法是不要以這種方式啓動守護進程並使用真正的服務管理,而不是尋找避免子進程的方法。 – JdeBP
這是由'fork()'在exec()'新程序之前關閉不需要的文件描述符(或將它們標記爲exec-on-exec)的程序。這不是你可以從外面強加給系統管理員的東西。 (關於編程方面的建議,你可能想去[如此])。 –