web-dev-qa-db-ja.com

waitpid()の使用例?

waitpid()がプロセスの終了を待つために使用されることは知っていますが、どのように正確に使用するのでしょうか?

ここでやりたいことは、2人の子を作成し、最初の子が終了するのを待ってから、終了する前に2番目の子を殺します。

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

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

waitpid()の構文:

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

pidの値は次のとおりです。

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

Optionsの値は、次の定数の0個以上のORです。

  • WNOHANG:子が終了していなければすぐに戻ります。
  • WUNTRACED:子が停止した場合にも返されます。このオプションが指定されていない場合でも、停止したトレース済みの子のステータスが提供されます。
  • WCONTINUEDSIGCONTの配信により停止した子が再開された場合にも返されます。

さらにヘルプが必要な場合は、man waitpid

24
mf_starboi_8041

構文は

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

1. pidは、待機する必要がある子のプロセスです。

2.statusPtrは、終了プロセスのステータス情報を保存する場所へのポインタです。

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

WNOHANG WUNTRACED WCONTINUED

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

待望の恩恵

1.Waitpidは、プロセスに複数の子があり、親が再開する前に特定の子の実行が完了するのを待ちたい場合に使用できます

2.waitpidはジョブ制御をサポートします

3.親プロセスの非ブロッキングをサポートします

13
KARTHIK BHAT