X-Git-Url: http://git.osdn.net/view?p=linuxjm%2FLDP_man-pages.git;a=blobdiff_plain;f=draft%2Fman2%2Fwait.2;h=5bacb64191cc6672c2d2b36fe9383b7dd4b66baa;hp=9164516104e43afa52667b0a2d6c50482bf4977c;hb=83f9e5d087c3464d5131604d3c9893479e6228eb;hpb=ad24a8da2d0555b45e75db36ccc1b56d01cc68e6 diff --git a/draft/man2/wait.2 b/draft/man2/wait.2 index 91645161..5bacb641 100644 --- a/draft/man2/wait.2 +++ b/draft/man2/wait.2 @@ -51,7 +51,23 @@ .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* -.TH WAIT 2 2012\-12\-21 Linux "Linux Programmer's Manual" +.\" +.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya all rights reserved. +.\" Japanese Version Copyright (c) 2005 Akihiro MOTOKI all rights reserved. +.\" Translated 1997-03-04, HANATAKA Shinya +.\" Modified 2000-09-23, HANATAKA Shinya +.\" Updated 2001-06-25, Kentaro Shirakata +.\" Updated 2001-10-15, Kentaro Shirakata +.\" Updated 2001-12-13, Kentaro Shirakata +.\" Updated 2002-10-21, Kentaro Shirakata +.\" Updated 2003-01-27, Kentaro Shirakata +.\" Updated 2003-09-12, Kentaro Shirakata +.\" Updated 2005-03-19, Akihiro MOTOKI +.\" Updated 2005-12-26, Akihiro MOTOKI +.\" Updated 2008-07-31, Akihiro MOTOKI, LDP v3.05 +.\" Updated 2013-05-06, Akihiro MOTOKI +.\" +.TH WAIT 2 2014\-08\-19 Linux "Linux Programmer's Manual" .SH 名前 wait, waitpid, waitid \- プロセスの状態変化を待つ .SH 書式 @@ -63,8 +79,9 @@ wait, waitpid, waitid \- プロセスの状態変化を待つ \fBpid_t waitpid(pid_t \fP\fIpid\fP\fB, int *\fP\fIstatus\fP\fB, int \fP\fIoptions\fP\fB);\fP -\fBint waitid(idtype_t \fP\fIidtype\fP\fB, id_t \fP\fIid\fP\fB, siginfo_t *\fP\fIinfop\fP\fB, -int \fP\fIoptions\fP\fB);\fP +\fBint waitid(idtype_t \fP\fIidtype\fP\fB, id_t \fP\fIid\fP\fB, siginfo_t *\fP\fIinfop\fP\fB, int \fP\fIoptions\fP\fB);\fP + /* これは glibc と POSIX のインターフェイスである。 + 生のシステムコールについての情報は「注意」の節を参照。 */ .sp .in -4n glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): @@ -87,7 +104,7 @@ _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTEN が実行されなかった場合には、終了した子プロセスは 「ゾンビ」状態で残り続ける (下記の注意の章を参照のこと)。 子プロセスの状態変化がすでに発生していた場合、これらのコールは すぐに復帰する。それ以外の場合は、子プロセスの状態変化が起こるか、 -シグナルハンドラによりシステムコールが中断されるまで、 停止 (block) する (後者は、 \fBsigaction\fP(2) の +シグナルハンドラーによりシステムコールが中断されるまで、 停止 (block) する (後者は、 \fBsigaction\fP(2) の \fBSA_RESTART\fP フラグによりシステムコールが自動的に再スタートするようになっていない 場合の動作である)。 以下の説明では、状態変化が起こったがこれらのシステムコールのいずれかに よって待たれていない子プロセスを \fIwaitable\fP (待ち可能) と呼ぶ。 .SS "wait() と waitpid()" @@ -128,7 +145,7 @@ _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTEN .PP \fIstatus\fP が NULL でなければ、 \fBwait\fP() や \fBwaitpid\fP() は \fIstatus\fP で指す \fIint\fP に状態情報を格納する。 この整数は以下のマクロを使って検査できる。 (これらのマクロの引き数には、 \fBwait\fP() や \fBwaitpid\fP() -が書き込んだ整数そのものを指定する。ポインタではない!) +が書き込んだ整数そのものを指定する。ポインターではない!) .TP \fBWIFEXITED(\fP\fIstatus\fP\fB)\fP 子プロセスが正常に終了した場合に真を返す。 「正常に」とは、 \fBexit\fP(3) か \fB_exit\fP(2) が呼び出された場合、もしくは @@ -196,7 +213,7 @@ waitable 状態のプロセスをそのままにする。この後で wait コ 子プロセスのプロセスID。 .TP \fIsi_uid\fP -子プロセスの実ユーザID (このフィールドは他のほとんどの実装では設定されない)。 +子プロセスの実ユーザーID (このフィールドは他のほとんどの実装では設定されない)。 .TP \fIsi_signo\fP 常に \fBSIGCHLD\fP が設定される。 @@ -208,7 +225,7 @@ waitable 状態のプロセスをそのままにする。この後で wait コ .TP \fIsi_code\fP 以下のいずれかが設定される: \fBCLD_EXITED\fP (子プロセスが \fB_exit\fP(2) を呼び出した); \fBCLD_KILLED\fP -(シグナルにより子プロセスが kill された); \fBCLD_DUMPED\fP (シグナルにより子プロセスが kill され、コア・ダンプが行われた); +(シグナルにより子プロセスが kill された); \fBCLD_DUMPED\fP (シグナルにより子プロセスが kill され、コアダンプが行われた); \fBCLD_STOPPED\fP (シグナルにより子プロセスが停止した); \fBCLD_TRAPPED\fP (トレースされていた子プロセスがトラップを受信した); \fBCLD_CONTINUED\fP (\fBSIGCONT\fP により子プロセスが再開された)。 .PP @@ -226,13 +243,14 @@ waitable 状態のプロセスをそのままにする。この後で wait コ \fBwaitpid\fP(): 成功すると、状態が変化した子プロセスのプロセスID を返す。 \fBWNOHANG\fP が指定されていて、 \fIpid\fP で指示された子プロセスが一つ以上存在するが、どの子プロセスでも 状態変化が起こっていなかった場合は、 0 を返す。 エラーの場合 \-1 を返す。 -.\" FIXME: As reported by Vegard Nossum, if infop is NULL, then waitid() +.\" FIXME As reported by Vegard Nossum, if infop is NULL, then waitid() .\" returns the PID of the child. Either this is a bug, or it is intended .\" behavior that needs to be documented. See my Jan 2009 LKML mail .\" "waitid() return value strangeness when infop is NULL". \fBwaitid\fP(): 成功すると 0 を返す。 \fBWNOHANG\fP が指定されていて、 \fIpid\fP -で指示された子プロセスで状態変化が起こっていなかった場合にも 0 を返す。 エラーの場合 \-1 を返す。 エラーの場合、これらのシステムコールはいずれも -\fIerrno\fP に適切な値を設定する。 +で指示された子プロセスで状態変化が起こっていなかった場合にも 0 を返す。 +.PP +エラーの場合 \-1 を返す。 エラーの場合、これらのシステムコールはいずれも \fIerrno\fP に適切な値を設定する。 .SH エラー .TP \fBECHILD\fP @@ -254,19 +272,20 @@ SVr4, 4.3BSD, POSIX.1\-2001. .SH 注意 終了したが、wait されていない子プロセスは「ゾンビ」になる。 後で親プロセスが wait を実行して子プロセスについての情報を取得できるように、 カーネルはゾンビプロセスについて最小限の情報 (PID、終了ステータス、 リソース使用状況) を保持する。 ゾンビプロセスは、 wait -によってシステムから削除されない限り、 カーネルのプロセステーブルの 1 エントリを消費する。このプロセステーブルが +によってシステムから削除されない限り、 カーネルのプロセステーブルの 1 エントリーを消費する。このプロセステーブルが 一杯になると、新たにプロセスを作ることができなくなる。 親プロセスが終了すると、その親プロセスの「ゾンビ」の 子プロセスは (もしあれば) -\fBinit\fP(8) の養子となる。 \fBinit\fP(8) は wait を自動的に実行し、ゾンビを削除する。 +\fBinit\fP(1) の養子となる。 \fBinit\fP(1) は wait を自動的に実行し、ゾンビを削除する。 POSIX.1\-2001 では以下のように規定されている。 \fBSIGCHLD\fP の動作が \fBSIG_IGN\fP に設定されたか、 \fBSIGCHLD\fP に対して \fBSA_NOCLDWAIT\fP フラグが設定された場合 (\fBsigaction\fP(2) 参照)、終了した子プロセスはゾンビにはならず、 \fBwait\fP() や \fBwaitpid\fP() の呼び出しは全ての子プロセスが終了するまで停止し、 子プロセスが全部終了した後 \fIerrno\fP に \fBECHILD\fP を設定して失敗する。 (もともとの POSIX 標準は \fBSIGCHLD\fP に \fBSIG_IGN\fP を設定した場合の振る舞いを未規定のままにしている。 \fBSIGCHLD\fP のデフォルトの動作が「無視」であるにもかかわらず、 \fBSIGCHLD\fP -の動作として \fBSIG_IGN\fP を明示的に設定した場合にはゾンビプロセスの子プロセスの扱いが 異なる点に注意すること。) Linux 2.6 -はこの仕様に準拠している。 しかし、Linux 2.4 (とそれ以前のバージョン) はそうではない: \fBSIGCHLD\fP が無視される状態で -\fBwait\fP() または \fBwaitpid\fP() が呼び出された場合、 \fBSIGCHLD\fP が無視されていないかのように振る舞う。 -つまり、呼び出しによって次の子プロセスの終了までブロックされ、 終了した子プロセスの PID と状態が返される。 +の動作として \fBSIG_IGN\fP を明示的に設定した場合にはゾンビプロセスの子プロセスの扱いが 異なる点に注意すること。) + +Linux 2.6 はこの仕様に準拠している。 しかし、Linux 2.4 (とそれ以前のバージョン) はそうではない: \fBSIGCHLD\fP +が無視される状態で \fBwait\fP() または \fBwaitpid\fP() が呼び出された場合、 \fBSIGCHLD\fP +が無視されていないかのように振る舞う。 つまり、呼び出しによって次の子プロセスの終了までブロックされ、 終了した子プロセスの PID と状態が返される。 .SS "Linux での注意" Linux カーネルでは、カーネルによってスケジュールされるスレッドは プロセスと明確に区別できる構成要素ではない。スレッドは Linux 固有の \fBclone\fP(2) システムコールを使用して生成されるプロセスに過ぎない。 移植性のある \fBpthread_create\fP(3) @@ -291,15 +310,19 @@ Linux 2.4 より前では、スレッドは単に特殊なプロセスであっ \fB__WNOTHREAD\fP (Linux 2.4 以降) .\" since patch-2.4.0-test8 同じスレッドグループの他のスレッドの子プロセスは待たない。 Linux 2.4 より前ではデフォルトであった。 +.SS "C ライブラリとカーネル ABI の違い" +生の \fBwaitid\fP() システムコールは \fIstruct rusage\ *\fP 型の第 5 引数を取る。 この引数が NULL 以外の場合、 +この引数が子プロセスのリソース使用状況を返すのに使用される。 これは \fBwait4\fP(2) と同じ方法である。 詳細は \fBgetrusage\fP(2) +を参照。 .SH バグ POSIX.1\-2008 によると、 \fBwaitid\fP() を呼び出すアプリケーションは、 \fIinfop\fP が \fIsiginfo_t\fP -構造体を指していること (つまり \fIinfop\fP が NULL でないポインタであること) を保証しなければならない。 Linux では、 +構造体を指していること (つまり \fIinfop\fP が NULL でないポインターであること) を保証しなければならない。 Linux では、 \fIinfop\fP が NULL の場合、 \fBwaitid\fP() は成功し、wait している子プロセスのプロセス ID を返す。 アプリケーションは、この食い違った、非標準で、不必要な機能に依存しないようにすべきである。 .SH 例 .\" fork.2 refers to this example program. 以下のプログラムは、 \fBfork\fP(2) と \fBwaitpid\fP() の使用方法の例を示している。 このプログラムでは子プロセスを生成する。 -コマンドライン引き数が指定されなかったときは、 子プロセスは \fBpause\fP(2) を使ってその実行を一時停止し、ユーザがその子プロセスに +コマンドライン引き数が指定されなかったときは、 子プロセスは \fBpause\fP(2) を使ってその実行を一時停止し、ユーザーがその子プロセスに シグナルを送信できるようにする。 コマンドライン引き数が指定された場合は、 子プロセスは直ちに終了し、 コマンドラインで指定された整数を終了ステータスとして使用する。 親プロセスは、 \fBwaitpid\fP() を使って子プロセスを監視し、 wait のステータス値を上記の W*() マクロを使って解析するという ループを実行する。 @@ -374,6 +397,5 @@ main(int argc, char *argv[]) \fBsigaction\fP(2), \fBsignal\fP(2), \fBwait4\fP(2), \fBpthread_create\fP(3), \fBcredentials\fP(7), \fBsignal\fP(7) .SH この文書について -この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.52 の一部 -である。プロジェクトの説明とバグ報告に関する情報は -http://www.kernel.org/doc/man\-pages/ に書かれている。 +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部である。 +プロジェクトの説明とバグ報告に関する情報は \%http://www.kernel.org/doc/man\-pages/ に書かれている。