wait4(2) FreeBSD 一般コマンドマニュアル

wait4

前のページ 上に戻る 次のページ

wait4




書式

     #include <sys/types.h>
     #include <sys/wait.h>

     pid_t
     wait(int *status);

     #include <sys/time.h>
     #include <sys/resource.h>

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

     pid_t
     wait3(int *status, int options, struct rusage *rusage);

     pid_t
     wait4(pid_t wpid, int *status, int options, struct rusage *rusage);


解説

     wait() 関数は、終了した子プロセスの status 情報が使用できるようになるま
     で、またはシグナルを受信するまで、呼出しプロセスの実行を停止します。
     wait() 呼出しが成功すると、 status 領域には下の定義のように終了したプロセ
     スの終了情報が入ります。

     wait4() 呼出しは、特定の子プロセスを待つ必要があり、子プロセスが蓄積した
     リソース利用統計あるいはオプションを必要とするプログラムのために、より一
     般的なインタフェースを提供します。その他の待機関数は、 wait4() を使用して
     実装されています。

     wpid パラメータは待つべき子プロセスの集合を指定します。 wpid が -1 である
     場合、この呼出しはすべての子プロセスを待ちます。 wpid が 0 である場合、こ
     の呼出しは、呼出し側のプロセスグループのすべての子プロセスを待ちます。
     wpid が 0 より大きい場合、この呼出しは プロセス ID が wpid であるプロセス
     を待ちます。 wpid が -1 より小さい場合、呼出しは、プロセスグループ ID が
     wpid の絶対値に等しいプロセスを待ちます。

     status パラメータは、以下のように定義されています。 options パラメータに
     は、以下の任意のオプションのビット論理和が入ります。 WNOHANG オプション
     は、ステータスを報告するプロセスがない場合に呼出しがブロックしないことを
     示すために使用します。 WUNTRACED オプションを設定すると、SIGTTIN シグナ
     ル、SIGTTOU シグナル、SIGTSTP シグナル、 SIGSTOP シグナルのために停止した
     カレントプロセスの子にも、そのステータスを報告させます。 rusage が 0 以外
     である場合は、終了したプロセスとそのすべての子が使用したリソースのサマリ
     が返されます (現在のところ、この情報は停止したプロセスについては使用でき
     ません)。 WNOHANG オプションを指定が指定され、ステータスを報告するプロセ
     スがない場合、 wait4() はプロセス ID 0 を戻します。

     waitpid() 呼出しは、 rusage の値を 0 にした wait4() と同じです。古い
     wait3() 呼出しは、 wpid の値を -1 にした wait4() と同じです。

             真となります。

     上記マクロの値に従って、以下のマクロは、子プロセスの残りのステータス情報
     を生成します。

     WEXITSTATUS(status)
             WIFEXITED(status) が真である場合に、子が _exit(2)exit(3) に渡
             した引数の下位 8 ビットを評価します。

     WTERMSIG(status)
             WIFSIGNALED(status) が真である場合に、プロセスの終了の原因となっ
             たシグナルの番号を評価します。

     WCOREDUMP(status)
             WIFSIGNALED(status) が真である場合に、プロセスが終了した後で、シ
             グナルを受信したときのプロセスのイメージを含むコアファイルが作成
             された場合に真となります。

     WSTOPSIG(status)
             WIFSTOPPED(status) が真である場合に、プロセスの停止の原因となった
             シグナルの番号を評価します。


     終了シグナルのリストについては、 sigaction(2) を参照してください。ステー
     タスが 0 であるということは、正常に終了したということです。

     すべての子プロセスの終了を待たずに親プロセスが終了すると、残りの子プロセ
     スには親プロセス 1 ID (init のプロセス ID) が割り当てられます。

     任意の wait() 呼出しが保留になっている間にシグナルを受信すると、シグナル
     受信ルーチンが戻ったときに、呼出しは割り込まれるか再開されます。これはシ
     グナルに影響するオプションに依存します。 intro(2) システムコールの再開
     (System call restart) の項目を参照してください。


戻り値

     子プロセスが停止したか終了したために wait() が戻った場合は、子のプロセス
     ID が呼出し側プロセスに戻されます。その他の場合は -1 が戻され、 errno が
     エラーを示すように設定されます。

     子プロセスが停止しているか終了したために wait4(), wait3(), waitpid() が
     戻った場合は、子のプロセス ID が呼出し側プロセスに戻されます。まだ wait
     されていない子プロセスが存在しない場合は、-1 が戻されて errno が ECHILD
     に設定されます。 WNOHANG が指定され、停止した子または終了した子がない場合
     は 0 が戻されます。エラーが検出されるか、受信シグナルによりこの呼出しが異
     常終了した場合は、 -1 が戻され、 errno がエラーを示すように設定されます。


エラー

     wait() は以下の場合にエラーとなり、ただちに戻ります:

     [ECHILD]           呼出し側プロセスは、wait されていない子プロセスを持ち
                        ません。



歴史

     wait() 関数は、 Version 6 AT&T UNIX で登場しました。

FreeBSD 4.4                     April 19, 1994                     FreeBSD 4.4

ABELNET VPSサービス