2017-06-02 82 views
0

子進程是另一個運行於execlp的C程序。這臺機器是Unix。我知道子進程可以通過execlp("ps", "ps", NULL)訪問進程表,但我無法弄清楚它是如何確定它的兄弟姐妹的。兒童進程是否有可能獲得其兄弟姐妹的PID?

即使進程是異步的,我知道兄弟進程將會運行。

+0

那麼,甚至不可能在[tag:c]中fork()'「* child *」。所以我們假設你的意思是C和POSIX擴展。那麼答案是:**否**,這是*不可*(沒有調用外部工具或其他平臺特定的黑客)。這可能是[XY-Problem](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? –

+1

沒有實際的方法來看這個(是的,你原則上可以解析'ps'的輸出,但是呃)。你需要傳達它,無論是從兄弟姐妹到兄弟姐妹,還是從父母到孩子。如果你告訴我們爲什麼你需要知道,我們可能會更具體。 – zwol

+0

是否有可能獲得父母的pid,然後加1,直到我們找到一個與當前子進程的pid(getpid)不匹配的有效pid?有沒有辦法檢查一個pid是否有效? 我知道一個更實際的方法是讓孩子向父母提供兄弟姐妹的數據,並讓父母回來,但我很好奇。 –

回答

1

子進程是否有可能獲得其兄弟的PID?

沒有使用某種協議與父母交談,這是不可能的便攜式方式。在某些系統上,它甚至可能根本不可能。