WAIT
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
wait
waitpid
wait4
wait3
- プロセスの終了待機
索引
ライブラリ
Lb libc
索引
書式
In sys/types.h
In sys/wait.h
Ft pid_t
Fn wait int *status
In sys/time.h
In sys/resource.h
Ft pid_t
Fn waitpid pid_t wpid int *status int options
Ft pid_t
Fn wait3 int *status int options struct rusage *rusage
Ft pid_t
Fn wait4 pid_t wpid int *status int options struct rusage *rusage
索引
解説
Fn wait
関数は、終了した子プロセスの
Fa status
情報が使用できるようになるまで、またはシグナルを受信するまで、
呼び出しプロセスの実行を停止します。
Fn wait
呼び出しが成功すると、
Fa status
領域には下の定義のように終了したプロセスの終了情報が入ります。
Fn wait4
システムコールは、特定の子プロセスを待つ必要があり、子プロセスが蓄積した
リソース利用統計あるいはオプションを必要とするプログラムのために、
より一般的なインタフェースを提供します。
その他の待機関数は、
Fn wait4
を使用して実装されています。
Fa wpid
引数は待つべき子プロセスの集合を指定します。
Fa wpid
が -1 である場合、この呼び出しはすべての子プロセスを待ちます。
Fa wpid
が 0 である場合、この呼び出しは、呼び出し側のプロセスグループの
すべての子プロセスを待ちます。
Fa wpid
が 0 より大きい場合、この呼び出しはプロセス ID が
Fa wpid
であるプロセスを待ちます。
Fa wpid
が -1 より小さい場合、呼び出しは、プロセスグループ ID が
Fa wpid
の絶対値に等しいプロセスを待ちます。
Fa status
引数は、以下のように定義されています。
Fa options
引数には、以下の任意のオプションのビット論理和が入ります。
WCONTINUED
オプションは、カレントプロセスの子プロセスで、ジョブ制御の停止状態から
SIGCONT
シグナルを受け取って復帰したプロセスのステータスも
報告するべきであることを示します。
WNOHANG
オプションは、ステータスを報告するプロセスがない場合に呼び出しが
ブロックしないことを示すために使用します。
WUNTRACED
オプションを設定すると、
SIGTTIN , SIGTTOU , SIGTSTP
SIGSTOP
シグナルのために停止したカレントプロセスの子にも、
そのステータスを報告させます。
Fa rusage
が 0 以外である場合は、終了したプロセスと
そのすべての子が使用したリソースのサマリが返されます
(現在のところ、この情報は停止したプロセスについては使用できません)。
WNOHANG
オプションが指定され、ステータスを報告するプロセスがない場合、
Fn wait4
はプロセス ID 0 を戻します。
Fn waitpid
関数は、
Fa rusage
の値を 0 にした
Fn wait4
と同じです。
古い
Fn wait3
呼び出しは、
Fa wpid
の値を -1 にした
Fn wait4
と同じです。
以下のマクロは、プロセスの終了の仕方を知るのに使用できます。
最初の 3 つのマクロは、0 以外 (真) の値を評価します:
- Fn WIFCONTINUED status
-
プロセスが終了しておらず、ジョブ制御の停止状態のあと復帰した場合に
真となります。
このマクロは wait 呼び出しに
WCONTINUED
オプションが指定された場合のみ真となります。
- Fn WIFEXITED status
-
_exit2
か
exit(3)
を呼び出し、プロセスが正常に終了した場合に真となります。
- Fn WIFSIGNALED status
-
シグナルを受信したためにプロセスが終了した場合に真となります。
- Fn WIFSTOPPED status
-
プロセスが終了していないが、停止していて再開できる場合に真となります。
このマクロは
wait
呼び出しで
WUNTRACED
オプションを指定するか、子プロセスがトレースされている
( ptrace(2)
を参照) 場合のみに真となります。
上記マクロの値に従って、以下のマクロは、
子プロセスの残りのステータス情報を生成します:
- Fn WEXITSTATUS status
-
Fn WIFEXITED status
が真である場合に、子が
_exit2
か
exit(3)
に渡した引数の下位 8 ビットを評価します。
- Fn WTERMSIG status
-
Fn WIFSIGNALED status
が真である場合に、プロセスの終了の原因となったシグナルの番号を評価します。
- Fn WCOREDUMP status
-
Fn WIFSIGNALED status
が真である場合に、プロセスが終了した後で、シグナルを受信したときの
プロセスのイメージを含むコアファイルが作成された場合に真となります。
- Fn WSTOPSIG status
-
Fn WIFSTOPPED status
が真である場合に、プロセスの停止の原因となったシグナルの番号を評価します。
索引
注
終了シグナルのリストについては、
sigaction(2)
を参照してください。
ステータスが 0 であるということは、正常に終了したということです。
すべての子プロセスの終了を待たずに親プロセスが終了すると、
残りの子プロセスには親プロセス ID に 1 (init のプロセス ID) が
割り当てられます。
任意の
Fn wait
呼び出しが保留になっている間にシグナルを受信すると、
シグナル受信ルーチンが戻ったときに、
呼び出しは割り込まれるか再開されます。
これはシグナルに影響するオプションに依存します。
intro(2)
システムコールの再開 (System call restart) の項目を参照してください。
索引
戻り値
子プロセスが停止したか終了したために
Fn wait
が戻った場合は、子のプロセス ID が呼び出し側プロセスに戻されます。
その他の場合は -1 が戻され、
errno
がエラーを示すように設定されます。
子プロセスが停止したか終了したために
Fn wait4 ,
Fn wait3 ,
Fn waitpid
が戻った場合は、子のプロセス ID が呼び出し側プロセスに戻されます。
まだ wait されていない子プロセスが存在しない場合は、-1 が戻されて
errno
が
Er ECHILD
に設定されます。
WNOHANG
が指定され、停止した子または終了した子がない場合は 0 が戻されます。
エラーが検出されるか、受信シグナルによりこの呼び出しが異常終了した場合は、
-1 が戻され、
errno
がエラーを示すように設定されます。
索引
エラー
Fn wait
関数は以下の場合にエラーとなり、ただちに戻ります:
- Bq Er ECHILD
-
呼び出し側プロセスは、wait されていない子プロセスを持ちません。
- Bq Er ECHILD
-
シグナル
SIGCHLD
を無視すること、またはこのシグナルに
SA_NOCLDWAIT
フラグを設定することにより、呼び出し側のプロセスは既にシステムに
このような戻り値を廃棄するように要求しているので、
終了された子プロセスからの戻り値が無いことが可能です。
- Bq Er EFAULT
-
Fa status
引数か
Fa rusage
引数が違法なアドレスを指しています。
(子プロセスの終了前には検出されないことがあります。)
- Bq Er EINTR
-
呼び出しが受信シグナルによって割り込まれたか、シグナルに
SA_RESTART
フラグが設定されていません。
索引
規格
Fn wait
関数と
Fn waitpid
関数は POSIX によって定義されています。
Fn wait4
と
Fn wait3
は POSIX の仕様ではありません。
Fn WCOREDUMP
マクロおよび保留中の
Fn wait
呼び出しを再開する機能は POSIX インタフェースの拡張機能です。
索引
関連項目
_exit2,
ptrace(2),
sigaction(2),
exit(3)
索引
歴史
Fn wait
関数は、
AT&T System
v6
で登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 注
-
- 戻り値
-
- エラー
-
- 規格
-
- 関連項目
-
- 歴史
-
Time: 07:06:32 GMT, January 12, 2009