2012-01-13 34 views
2

這是我在fork()和各自wait()將要發生的問題:UNIX進程:fork()和wait()的

在我main(),我調用一個函數,讓我們說function()使用該fork()系統調用,但我希望function()返回而不必等待孩子終止,因此main()必須在終止之前等待它們。

那麼,main()是否有可能在fork()編輯過的另一個函數body中調用wait()這個main()

如果是,是否必須通過變量將孩子的pid傳遞給main()

回答

1

是的,主要可以等待子功能派生的孩子。 wait()等待任何孩子終止。

您仍然希望將fork()的返回值傳遞給main函數,因爲您將需要它來決定您是子進程還是父進程。

2

如果我正確地遵循了問題,你想有這樣的事情:

  • main電話function
  • function電話fork創建子/仁,並返回在父進程
  • main後來致電wait對子/ ren

This很好...名義上,你不需要必須將子(PID)的PID傳回main,因爲你可以直接調用wait收穫碰巧存在的任何子進程;但是,要使用waitidwaitpid,您需要/希望將它們提供回main。您可以將PID返回到main的結構,如鏈接列表或NULL結尾的數組,或創建某種文件範圍或全局變量來包含列表。

有在Linux手冊頁一個不錯的細目wait(2)man 2 wait左右)