2012-01-13 11 views
2

これは場所取るfork()とそれぞれwait()上の私の質問です:私のmain()UNIXプロセス:fork()と(待つ)

を、私は関数を呼び出す、のはfork()システムコールを使用していますfunction()をしましょうしかし、私はfunction()が子どもが終了するのを待たずに戻りたいので、main()は終了する前にそれらを待たなければなりません。

main()fork()という別の機能の本体にという名前の子どものwait()を呼び出すことは可能ですか?

はいの場合は、子供のpidをmain()に変数で渡す必要がありますか?

答えて

1

はい、mainはサブ関数をフォークした子を待つことができます。 wait()は子プロセスが終了するのを待ちます。

fork()の戻り値は、あなたが子プロセスか親プロセスかを判断するために必要なので、main関数に引き渡したいと思うでしょう。

2

私が正しく質問に従っている場合、あなたはこのような何かがしたい:

  • main呼び出し子供/ RENを作成するforkを呼び出しfunctionfunction
  • 、および親プロセスにおけるリターン
  • mainを後で子供/レンにwaitと電話する

これは良いです...公然と、には、子プロセスが収まるようにwaitを呼び出すことができるので、子(ren)のPIDをmainに戻す必要があります。ただし、waitidまたはwaitpidを使用するには、mainまでのバックアップを提供する必要があります。 PIDをmainにリンクリストやNULL終端された配列のような構造体で返すか、ファイルスコープのグローバル変数を作成してリストを含めることができます。 wait(2)man 2 wait程度)

のためのLinuxのマニュアルページではかなり良い内訳があります