簡體   English   中英

作為子進程,如何知道哪個文件描述符是父文件描述符

[英]As a process child, how to know which file descriptor is parents

我試圖編寫一個程序,該程序分叉並等待他的孩子完成,然后該孩子對輸入進行一些工作,然后以與父級相同的方式進行分叉,依此類推。

現在,我知道分叉將子文件描述符數組復制到子目錄,並且我應該關閉與父目錄關聯的文件描述符,但是我無法弄清楚哪些是父目錄。 我需要給我的孩子父母pid嗎?

在一個多小時的時間里,我一直在努力思考,我認為我有某種思維障礙,因為我無法得出結論。

TL; DR:作為子進程,我如何知道哪些文件描述符屬於我的父文件?

fork (並且任何exec函數之前 ),您的子進程具有與其父進程相同的狀態(除了fork的結果(僅在子fork中為0))。 因此, 您知道什么是文件描述符,因為您已對在parent&child中運行的程序進行了編碼。 在Linux上,您還可以閱讀/proc/self/fd/目錄,請參閱proc(5)

您可能會在forkexec之前關閉大多數文件描述符; 你可以編寫類似的代碼

for (int fd=3; fd<64; fd++) (void) close(fd);

我們從3開始,即STDERR_FILENO在2之后,並且我們在64處任意停止,並且close調用上的強制轉換為(void)對讀者而言,我們並不關心close ...失敗。當然,如果您有例如一些pipe(7) -s在父子之間進行通信,則應注意避免關閉其相關的文件描述符。

(但是,像上述那樣閉合循環會導致口味變差和過時)

在一般情況下,你會在你的程序中設置的最文件描述符的close-on-exec標志小心(如的fcntl(2)F_SETFD操作和FD_CLOEXEC標志,或者直接打開(2)O_CLOEXEC ),那么execve的(2) (在fork之后的大多數子進程中完成)將其關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM