2011-02-17 86 views
0

我有一些代碼,其中幾個進程是由分叉創建的。每個進程都有popen()函數來執行一些shell命令。問題是所有這些進程使用相同的輸入/輸出流。這是由於進程同時寫入一個流而發生衝突時的原因。每個分叉進程的不同輸入/輸出流

有沒有什麼辦法解決這個問題,以便每個分支進程都使用它自己的流? 在我的情況下,不允許對分叉進行任何操作。

+0

請顯示一些代碼,這並不清楚你的意思。 – 2011-02-17 15:43:18

回答

2

您必須在子進程之前關閉並重新打開stdin和stdout,或者如果可能的話,緊接在fork之後。

1

當你調用fork()時,你從父進程繼承文件描述符(stdin,stdout等)。當你popen它將採取共享的標準輸入/標準輸出,並將其管理到進程中。這聽起來好像你想在分叉之後關閉任何打開的文件描述符,然後重新打開它們。