LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

wait(2)

Posted at

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 を返す。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up