WAIT4(2)

名前
wait3, wait4 - BSD スタイルでプロセスの状態変化を待つ

書式
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>

pid_t wait3(int *wstatus, int options,
            struct rusage *rusage);

pid_t wait4(pid_t pid, int *wstatus, int options,
            struct rusage *rusage);

    glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

wait3():
    Since glibc 2.26:
        _DEFAULT_SOURCE ||
        (_XOPEN_SOURCE >= 500 &&
                ! (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600))
    From glibc 2.19 to 2.25:
        _DEFAULT_SOURCE || _XOPEN_SOURCE >= 500
    Glibc 2.19 and earlier:
        _BSD_SOURCE || _XOPEN_SOURCE >= 500
wait4():
    Since glibc 2.19:
        _DEFAULT_SOURCE
    Glibc 2.19 and earlier:
        _BSD_SOURCE

説明
These functions are nonstandard; in new programs, the use of waitpid(2) or waitid(2) is preferable.

システムコール wait3() と wait4() は waitpid(2) と同様の動作をする。それに加え、子プロセスのリソース使用状況の情報を rusage が指す構造体に入れて返す。

rusage を使用する点を除けば、次の wait3() の呼び出し

    wait3(wstatus, options, rusage);

は以下と等価である。

    waitpid(-1, wstatus, options);

同様に、次の wait4() の呼び出し

    wait4(pid, wstatus, options, rusage);

は以下と等価である。

    waitpid(pid, wstatus, options);

言い換えると、 wait3() は全ての子プロセスを対象に待つが、 wait4() では特定の子プロセス (複数可) を選んで待つことができる。

rusage が NULL でない場合、 rusage が指す rusage 構造体 には子プロセスのアカウント情報が格納される。 詳しくは getrusage(2) を参照のこと。

返り値
waitpid(2) と同様。

エラー
waitpid(2) と同様。

準拠
4.3BSD.

SUSv1 には wait3() の規定があった。 SUSv2 には wait3() が含まれていたが、「過去の名残 (LEGACY)」となっていた。 SUSv3 では wait3() は削除された。

注意
現在では <sys/time.h> をインクルードする必要はないが、インクルードしておくと 移植性を高めることができる (実際には <sys/resource.h> で rusage 構造体が定義されているが、そのフィールドで使用されている struct timeval 型は <sys/time.h> で定義されている)。

  C ライブラリとカーネルの違い
Linux では、 wait3() はライブラリ関数であり、 wait4() システムコールを使って実装されている。

関連項目
fork(2), getrusage(2), sigaction(2), signal(2), wait(2), signal(7)

この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。