1
是否有任何方法可以創建一個新的進程,即使在exec之後也共享文件描述符表? clone(CLONE_FILES)
將無法正常工作,因爲人網頁顯示:在兒童完成一個exec之後與子進程共享文件描述符表
如果一個進程共享一個文件描述符表調用的execve(2),其文件描述符表被複制(非共享)。
是否有任何方法可以創建一個新的進程,即使在exec之後也共享文件描述符表? clone(CLONE_FILES)
將無法正常工作,因爲人網頁顯示:在兒童完成一個exec之後與子進程共享文件描述符表
如果一個進程共享一個文件描述符表調用的execve(2),其文件描述符表被複制(非共享)。
這裏有什麼目標呢?爲什麼你需要一個實時共享的文件描述符表副本,一旦進程停止,即使是相同的可執行文件?乍一看似乎無意義,所以我懷疑這可能是[XY問題](https://meta.stackexchange.com/q/66377/322040)。 – ShadowRanger
@ShadowRanger我正在爲Linux編寫一個x86用戶模式模擬器,並通過在模擬器的同時在ptrace下運行一個真實進程並對每條指令的CPU狀態進行比較來測試它。當模仿一個mmap調用的時候,我想把父母使用的FD和覆蓋edi的東西用在孩子身上。不是一個很常見的用例,這是肯定的。 – tbodt
即使'execve()'之後未打開的文件描述符被共享,打開的文件描述仍然是共享的 - 是的,確實存在描述符和描述。閱讀['open()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html), ['dup2()']的POSIX規範(http://pubs.opengroup (''fork()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fork.html), ['execve() '](http://pubs.opengroup.org/onlinepubs/9699919799/functions/execve.html)。 –