Wait
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
子プロセスの状態遷移を監視。
子プロセスの状態変化が起こるか、 シグナルによる割り込みが発生するまで、 ブロックする。
pid_t waitpid(pid_t pid, int *status, int options);
##引数
pid
監視する子プロセスの種類を指定。次の4種類が利用できる。
-1より小さい数: ロセスグループID が pid の絶対値に等しい子プロセスのいずれか
-1: 子プロセスのどれか
0(ゼロ): プロセスグループID が呼び出したプロセスのものと等しい子プロセス
0(ゼロ)より大きい数: プロセスID が pid に等しい子プロセス
options
waitを発行する際の動作を決める。
WNOHANG
状態変化が起こった子プロセスがない場合にすぐに復帰する。
WUNTRACED
子プロセスが停止した場合にも復帰する。
WCONTINUED (Linux 2.6.10 以降)
停止した子プロセスが SIGCONT の配送により再開した場合にも復帰する。
status が NULL でなければ、 status で指す int に状態情報を格納する。
この整数は以下のマクロを使って検査できる。
マクロ:
WIFEXITED(status)
子プロセスが正常に終了した場合に真を返す。WEXITSTATUS(status)
子プロセスの終了ステータスを返す。
このマクロを使用するのは WIFEXITED が真を返した場合だけにすべきである。WIFSIGNALED(status)
子プロセスがシグナルにより終了した場合に真を返す。WTERMSIG(status)
子プロセス終了の原因となったシグナルの番号を返す。
このマクロを使用するのは WIFSIGNALED が真を返した場合だけにすべきである。WCOREDUMP(status)
子プロセスがコアダンプを生成した場合に真を返す。
このマクロを使用するのは WIFSIGNALED が真を返した場合だけにすべきである。
必ず #ifdef WCOREDUMP ... #endif で括って使用すること。WIFSTOPPED(status)
子プロセスがシグナルの配送により停止した場合に真を返す。
これが真になるのは、システムコールが WUNTRACED を指定して呼び出された場合か、
子プロセスがトレースされている場合 (ptrace(2) 参照) だけである。WSTOPSIG(status)
子プロセスを停止させたシグナルの番号を返す。
このマクロを使用するのは WIFSTOPPED が 0 以外を返した場合だけにすべきである。WIFCONTINUED(status)
(Linux 2.6.10 以降) 子プロセスが SIGCONT の配送により再開した場合に真を返す。
##戻り値
状態変化した子プロセスのPID。
WNOHANG が指定され pid で指示された子プロセスが一つ以上存在するが状態変化が起こっていなかった場合は 0 。
エラーの場合 -1 を返す。