web-dev-qa-db-ja.com

wait()はUnixで何をしますか?

Unixシステムの本でwait()関数について読んでいました。この本には、wait(NULL)を含むプログラムが含まれています。それが何を意味するのかわかりません。他のプログラムでは

while(wait(NULL)>0) 

...それも頭をかいてしまいました。

上記の機能が何をしているのか誰かが説明できますか?

7
Naruto

wait(2)

これらのシステムコールはすべて、呼び出しプロセスの子の状態変化を待機し、状態が変化した子に関する情報を取得するために使用されます。状態の変化は次のように見なされます。子が終了した。子供は合図によって止められました。または子供は合図によって再開されました

したがって、wait()を使用すると、プロセスは、子プロセスの1つが状態を変更するまで待機できます(たとえば、存在します)。 waitpid()がプロセスIDで呼び出された場合、pidが指定されていない場合は、wait()を呼び出すのと同じで、any子プロセスが状態を変更するのを待ちます。

wait()関数は、成功すると子pidを返すため、次のようなループで呼び出されると次のようになります。

while(wait(NULL)>0) 

これは、すべての子プロセスが終了する(または状態を変更する)まで待機し、待機されていない子プロセスがなくなるまで(またはエラーが発生するまで)待機することを意味します。

21
iabdalkader

簡単なグーグルが提案する、wait(NULL)は子プロセスのいずれかが完了するのを待つ

2
Aniket Inge

wait(NULL)これはwaitpid(-1, NULL, 0)と同等である必要があります

wait(NULL)すべての子プロセスが完了するのを待ちます

0
Rahul Tripathi