.\" Copyright (c) 1980, 1991, 1993, 1994 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)wait.2 8.2 (Berkeley) 4/19/94 .\" .\" %FreeBSD: src/lib/libc/sys/wait.2,v 1.6.2.5 2001/08/17 15:42:46 ru Exp % .\" $FreeBSD: doc/ja_JP.eucJP/man/man2/wait.2,v 1.5 2001/07/29 05:15:15 horikawa Exp $ .Dd April 19, 1994 .Dt WAIT 2 .Os .Sh 名称 .Nm wait , .Nm waitpid , .Nm wait4 , .Nm wait3 .Nd プロセスの終了待機 .Sh ライブラリ .Lb libc .Sh 書式 .Fd #include .Fd #include .Ft pid_t .Fn wait "int *status" .Fd #include .Fd #include .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" .Sh 解説 .Fn wait 関数は、終了した子プロセスの .Fa status 情報が使用できるようになるまで、またはシグナルを受信するまで、 呼出しプロセスの実行を停止します。 .Fn wait 呼出しが成功すると、 .Fa status 領域には下の定義のように終了したプロセスの終了情報が入ります。 .Pp .Fn wait4 呼出しは、特定の子プロセスを待つ必要があり、 子プロセスが蓄積したリソース利用統計あるいは オプションを必要とするプログラムのために、 より一般的なインタフェースを提供します。 その他の待機関数は、 .Fn wait4 を使用して実装されています。 .Pp .Fa wpid パラメータは待つべき子プロセスの集合を指定します。 .Fa wpid が -1 である場合、この呼出しはすべての子プロセスを待ちます。 .Fa wpid が 0 である場合、この呼出しは、呼出し側のプロセスグループの すべての子プロセスを待ちます。 .Fa wpid が 0 より大きい場合、この呼出しは プロセス ID が .Fa wpid であるプロセスを待ちます。 .Fa wpid が -1 より小さい場合、呼出しは、プロセスグループ ID が .Fa wpid の絶対値に等しいプロセスを待ちます。 .Pp .Fa status パラメータは、以下のように定義されています。 .Fa options パラメータには、以下の任意のオプションのビット論理和が入ります。 .Dv WNOHANG オプションは、ステータスを報告するプロセスがない場合に呼出しがブロック しないことを示すために使用します。 .Dv WUNTRACED オプションを設定すると、SIGTTIN シグナル、SIGTTOU シグナル、SIGTSTP シグナル、 .Dv SIGSTOP シグナルのために停止したカレントプロセスの子にも、 そのステータスを報告させます。 .Fa rusage が 0 以外である場合は、終了したプロセスと そのすべての子が使用したリソースのサマリが返されます (現在のところ、この情報は停止したプロセスについては使用できません)。 .Dv WNOHANG オプションを指定が指定され、ステータスを報告するプロセスがない場合、 .Fn wait4 はプロセス ID 0 を戻します。 .Pp .Fn waitpid 呼出しは、 .Fa rusage の値を 0 にした .Fn wait4 と同じです。古い .Fn wait3 呼出しは、 .Fa wpid の値を -1 にした .Fn wait4 と同じです。 .Pp 以下のマクロは、プロセスの終了の仕方を知るのに 使用できます。最初の 3 つのマクロは、0 以外 (真) の値を評価します。 .Bl -tag -width Ds .It Fn WIFEXITED status .Xr _exit 2 か .Xr exit 3 を呼出し、プロセスが正常に終了した場合に真となります。 .It Fn WIFSIGNALED status シグナルを受信したためにプロセスが終了した場合に真となります。 .It Fn WIFSTOPPED status プロセスが終了していないが、停止していて再開できる場合に真と なります。このマクロは .Fn wait 呼出しで .Dv WUNTRACED オプションを指定するか、子プロセスがトレースされている ( .Xr ptrace 2 を参照) 場合のみに真となります。 .El .Pp 上記マクロの値に従って、以下のマクロは、 子プロセスの残りのステータス情報を生成します。 .Bl -tag -width Ds .It Fn WEXITSTATUS status .Fn WIFEXITED status が真である場合に、子が .Xr _exit 2 か .Xr exit 3 に渡した引数の下位 8 ビットを評価します。 .It Fn WTERMSIG status .Fn WIFSIGNALED status が真である場合に、プロセスの終了の原因となったシグナルの番号を評価します。 .It Fn WCOREDUMP status .Fn WIFSIGNALED status が真である場合に、プロセスが終了した後で、シグナルを受信したときの プロセスのイメージを含むコアファイルが作成された場合に真となります。 .It Fn WSTOPSIG status .Fn WIFSTOPPED status が真である場合に、プロセスの停止の原因となったシグナルの番号を評価します。 .El .Sh 注 終了シグナルのリストについては、 .Xr sigaction 2 を参照してください。 ステータスが 0 であるということは、正常に終了したということです。 .Pp すべての子プロセスの終了を待たずに親プロセスが終了すると、 残りの子プロセスには親プロセス 1 ID (init のプロセス ID) が割り当てられます。 .Pp 任意の .Fn wait 呼出しが保留になっている間にシグナルを受信すると、 シグナル受信ルーチンが戻ったときに、 呼出しは割り込まれるか再開されます。 これはシグナルに影響するオプションに依存します。 .Xr intro 2 システムコールの再開 (System call restart) の項目を参照してください。 .Sh 戻り値 子プロセスが停止したか終了したために .Fn wait が戻った場合は、子のプロセス ID が呼出し側プロセスに戻されます。 その他の場合は -1 が戻され、 .Va errno がエラーを示すように設定されます。 .Pp 子プロセスが停止しているか終了したために .Fn wait4 , .Fn wait3 , .Fn waitpid が戻った場合は、子のプロセス ID が呼出し側プロセスに戻されます。 まだ wait されていない子プロセスが存在しない場合は、-1 が戻されて .Va errno が .Er ECHILD に設定されます。 .Dv WNOHANG が指定され、停止した子または終了した子がない場合は 0 が戻されます。 エラーが検出されるか、受信シグナルによりこの呼出しが異常終了した場合は、 -1 が戻され、 .Va errno がエラーを示すように設定されます。 .Sh エラー .Fn wait は以下の場合にエラーとなり、ただちに戻ります: .Bl -tag -width Er .It Bq Er ECHILD 呼出し側プロセスは、wait されていない子プロセスを持ちません。 .It Bq Er EFAULT .Fa status 引数か .Fa rusage 引数が違法なアドレスを指しています。(子プロセスの終了前には 検出されないことがあります。) .It Bq Er EINTR 呼出しが受信シグナルによって割り込まれたか、シグナルに .Dv SA_RESTART フラグが設定されていません。 .El .Sh 規格 .Fn wait 関数と .Fn waitpid 関数は POSIX によって定義されています。 .Fn wait4 と .Fn wait3 は POSIX の仕様ではありません。 .Fn WCOREDUMP マクロおよび保留中の .Fn wait 呼出しを再開する機能は POSIX インタフェースの拡張機能です。 .Sh 関連項目 .Xr ptrace 2 , .Xr sigaction 2 , .Xr _exit 2 , .Xr exit 3 .Sh 歴史 .Fn wait 関数は、 .At v6 で登場しました。