#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
システムコール 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) を参照のこと。
SUSv1 には wait3() の規定があった。 SUSv2 には wait3() が含まれていたが、「過去の名残 (LEGACY)」となっていた。 SUSv3 では wait3() は削除された。