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

名称
ライブラリ
書式
解説
戻り値
エラー
規格
関連項目
歴史

jman



Time: 07:06:32 GMT, January 12, 2009