2014-01-21 5 views
9

私はプロセスが完了するのを待つのにwaitpid()が使用されていることを知っていますが、どのように使用するのですか?waitpid()の使用例

私がしたいことは、2人の子供を作り、最初の子供が終わるのを待ってから、もう1人の子供を殺してから退室することです。 waitpid()

//Create two children 
pid_t child1; 
pid_t child2; 
child1 = fork(); 

//wait for child1 to finish, then kill child2 
waitpid() ... child1 { 
kill(child2) } 
+1

Linuxシステムの 'wait(2)'のマニュアルページには、 'waitpid()'システムコールの実際の使用例が含まれています。 – larsks

+0

私はあなたが '[c] waitpid'のためにSOを検索することによって、むしろ簡単に答えを見つけることができると思います。 '[c] [waitpid]'を検索するほうが簡単ではありません。私は最初の検索で48の質問に回答し、2つ目で5の質問に答えました。私は決してそのような質問に答えた唯一の人ではありません。 –

答えて

13

構文:

pid_t waitpid(pid_t pid, int *status, int options); 

pidの値とすることができる:

  • < -1:そのプロセスグループIDに等しい任意の子プロセスを待ちます絶対値はpidです。
  • -1:子プロセスを待ちます。
  • :プロセスグループIDが呼び出しプロセスのIDと等しい子プロセスを待ちます。
  • > 0:プロセスIDがpidの値の子を待機します。

    • WNOHANG

    オプションの値は次の定数の0個以上のある子プロセスが終了していない場合は、すぐに返します。

  • WUNTRACED:子供が停止している場合も戻ります。このオプションが指定されていなくても、停止しているトレースされた子プロセスのステータスが提供されます。
  • WCONTINUED:停止した子がSIGCONTの配信で再開された場合にも返されます。

詳細については、man waitpidをご利用ください。

+2

https://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/waitpid.htmでは、より詳細な情報を提供しています。私は個人的には、ここでこの質問に対する2つの答えから効果的にwaitpidを使う方法を理解できませんでした。 –

9

構文は

pid_t waitpid(pid_t pid, int *statusPtr, int options); 

1.whereのpidは、それが待機しなければならない子のプロセスです。

2.statusPtrは、終了プロセスのステータス情報が格納される場所へのポインタです。

3. waitpid関数のオプションのアクションを指定します。以下のオプションフラグのいずれかを指定することができ、またはそれらはビット単位の包含的OR演算子と組み合わせることができます。

WNOHANG WUNTRACED WCONTINUED

成功した場合は、終了したプロセスのプロセスIDを返すのwaitpidステータスが報告されました。失敗した場合は、-1が返されます。

ベニフィートオーバーウェイト

1。waitpidのは、あなたがプロセスのために複数の子を持つ親が

2.waitpidを再開する前に、あなたはその実行を成し遂げるために特定の子を待ちたいときに使用することができますが

3.itはの非ブロッキングをサポートしているジョブ制御をサポートしています親プロセス