Unixシステムの本でwait()
関数について読んでいました。この本には、wait(NULL)
を含むプログラムが含まれています。それが何を意味するのかわかりません。他のプログラムでは
while(wait(NULL)>0)
...それも頭をかいてしまいました。
上記の機能が何をしているのか誰かが説明できますか?
男 wait(2)
これらのシステムコールはすべて、呼び出しプロセスの子の状態変化を待機し、状態が変化した子に関する情報を取得するために使用されます。状態の変化は次のように見なされます。子が終了した。子供は合図によって止められました。または子供は合図によって再開されました
したがって、wait()
を使用すると、プロセスは、子プロセスの1つが状態を変更するまで待機できます(たとえば、存在します)。 waitpid()
がプロセスIDで呼び出された場合、pid
が指定されていない場合は、wait()
を呼び出すのと同じで、any子プロセスが状態を変更するのを待ちます。
wait()
関数は、成功すると子pidを返すため、次のようなループで呼び出されると次のようになります。
while(wait(NULL)>0)
これは、すべての子プロセスが終了する(または状態を変更する)まで待機し、待機されていない子プロセスがなくなるまで(またはエラーが発生するまで)待機することを意味します。
簡単なグーグルが提案する、wait(NULL)
は子プロセスのいずれかが完了するのを待つ
wait(NULL)
これはwaitpid(-1, NULL, 0)
と同等である必要があります
wait(NULL)
すべての子プロセスが完了するのを待ちます