我知道還有另一個同名的線程,但這實際上是一個不同的問題。分叉進程的執行順序
當進程分叉多次時,父節點是否在子節點之前完成執行?反之亦然?同時?
下面是一個例子。假設我有一個for循環,將1個父進程分爲4個子進程。在for循環結束時,我希望父進程通過管道將一些數據提供給子進程。數據被寫入每個子進程的相應stdin。
在任何孩子執行他們的代碼之前,父母會先發送數據嗎?這很重要,因爲我們不希望它從一個無效的stdin開始工作。
我知道還有另一個同名的線程,但這實際上是一個不同的問題。分叉進程的執行順序
當進程分叉多次時,父節點是否在子節點之前完成執行?反之亦然?同時?
下面是一個例子。假設我有一個for循環,將1個父進程分爲4個子進程。在for循環結束時,我希望父進程通過管道將一些數據提供給子進程。數據被寫入每個子進程的相應stdin。
在任何孩子執行他們的代碼之前,父母會先發送數據嗎?這很重要,因爲我們不希望它從一個無效的stdin開始工作。
它們將同時執行。這基本上就是流程的重點。
研究互斥鎖或其他方式來處理併發。
當一個進程分叉多次時,父節點是否在子節點之前完成執行?反之亦然?同時? -
同時並取決於調度程序及其不可預知的。
Using pipe to pass integer values between parent and child
此鏈接詳細解釋了有關父進程和孩子之間共享數據。 由於您有四個子進程,您可能需要在每個子進程之間創建不同的獨立管道。
寫入到管道的每個字節的數據都只能被讀取一次。它不會複製到每個進程打開管道的讀取結束。
Multiple child processes reading/writing on the same pipe
或者你可以嘗試在數據傳輸共享內存。
當進程分叉多次時,父節點在子節點之前是否完成執行?反之亦然?同時? - 同時取決於調度程序及其不可預測性。 –
您可以使用等待函數調用等待子進程完成,然後父進程將執行 –
如何獲取子進程的管道?這不是'popen()'的設計目的嗎? (另外,'fork()'返回後,應該存在兩個進程,所以在那個時候,無論你在哪一個進程中,一個完整的子進程應該存在有效的標準輸入和標準輸出) – ebyrob