250 lines
7.3 KiB
Groff
250 lines
7.3 KiB
Groff
.\" 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
|
|
.\"
|
|
.Dd April 19, 1994
|
|
.Dt WAIT 2
|
|
.Os BSD 4
|
|
.Sh 名称
|
|
.Nm wait ,
|
|
.Nm waitpid ,
|
|
.Nm wait4 ,
|
|
.Nm wait3
|
|
.Nd プロセスの終了待機
|
|
.Sh ライブラリ
|
|
.Lb libc
|
|
.Sh 書式
|
|
.Fd #include <sys/types.h>
|
|
.Fd #include <sys/wait.h>
|
|
.Ft pid_t
|
|
.Fn wait "int *status"
|
|
.Fd #include <sys/time.h>
|
|
.Fd #include <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"
|
|
.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 _exit 2 ,
|
|
.Xr ptrace 2 ,
|
|
.Xr sigaction 2 ,
|
|
.Xr exit 3
|
|
.Sh 歴史
|
|
.Fn wait
|
|
関数は、
|
|
.At v6
|
|
で登場しました。
|