wait、waitpid、 wait3、 wait364、および wait4 サブルーチン
目的
子プロセスが停止または終了するのを待機します。
ライブラリー
標準 C ライブラリー (libc.a)
構文
#include <sys/wait.h>
pid_t wait (StatusLocation)
int *StatusLocation;
pid_t wait ((void *) 0)#include <sys/wait.h>
pid_t waitpid (ProcessID,StatusLocation,Options)
int *StatusLocation;
pid_t ProcessID;
int Options;#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
pid_t wait3 (StatusLocation, Options,ResourceUsage)
int *StatusLocation;
int Options; struct rusage *ResourceUsage;
pid_t wait364 (StatusLocation, Options,ResourceUsage)
int *StatusLocation;
int Options;
struct rusage64 *ResourceUsage;
pid_t wait4 (ProcessID,(StatusLocation, Options,ResourceUsage)
pid_t ProcessID;
int *StatusLocation;
int Options;
struct rusage64 *ResourceUsage;説明
待機 サブルーチンは、ブロックまたは無視されないシグナルをプロセスが受け取るまで、または呼び出しプロセスの子プロセスのいずれかが停止または終了するまで、呼び出しスレッドを中断します。 待機 サブルーチンは、待機中の子プロセスが呼び出しの前に停止または終了すると、待機せずに戻ります。 正常に終了すると、終了したプロセスの PID が 待機 サブルーチンによって戻されます。
waitpid サブルーチンには、 ProcessID パラメーターが含まれています。このパラメーターを使用すると、呼び出しスレッドは、以下の規則に従って、特定の子プロセスのセットから状況を収集することができます。
- ProcessID 値が -1の値と等しい場合、すべての子プロセスについて状況が要求されます。 この点において、 waitpid サブルーチンは wait サブルーチンと同等です。
- 0 より大きい ProcessID 値は、状況が要求される単一の子プロセスのプロセス ID を指定します。
- ProcessID パラメーターが 0 の場合、プロセス・グループ ID が呼び出しスレッドのプロセス ID と等しいすべての子プロセスの状況が要求されます。
- ProcessID パラメーターが 0 より小さい場合、プロセス・グループ ID が ProcessID パラメーターの絶対値と等しいすべての子プロセスの状況が要求されます。
ウェイトピッド、 wait3、 wait364、 wait4 サブルーチン・バリアントは、サブルーチンの動作を変更できる オプション パラメーターを提供します。 WNOハング と UNTRACED (WUNTRACED)の 2 つの値が定義されます。これらの値は、ビット単位包含 OR (包含論理和) を指定することによって結合できます。 WNOハング オプションは、待機する子プロセスがある場合でも、呼び出しスレッドが中断されないようにします。 この場合、停止または終了する子プロセスがないことを示す値 0 が戻されます。 UNTRACED (WUNTRACED) オプションが設定されている場合、呼び出しは、 シティチン、 SIGTTOU (S)、 SIGSSTP (S)、または SIGTSTOP (S) シグナルを受け取るため、現行プロセスの子が停止したときにも情報を返します。
wait364 サブルーチンを呼び出して、32 ビット環境で 64 ビット RUSAGE カウンターを明示的に使用可能にすることができます。
wait4() サブルーチンは wait3() サブルーチンと似ていますが、子のプロセス ID を指定できる点が異なります。 wait3() サブルーチンは子プロセスを待機しますが、 wait4() サブルーチンは特定の子プロセスを待機することができます。
64 ビット数量値は、 構造体 rusageの Ru_utime および ルスタイム フィールドの wait3() および wait4() インターフェースを介して、64 ビット・アプリケーションでも使用可能です。
32 ビット・プロセスが ptraceでデバッグされている場合、プロセスが ロード、 アンロード、または ロード・バインドを呼び出すと、状況ロケーションは SLWTED (_S) に設定されます。 64 ビット・プロセスが ptraceでデバッグされている場合、プロセスが ロード または アンロードを呼び出すと、状況ロケーションは SLWTED (_S) に設定されます。
マルチプロセッシング・デバッグ・モードが使用可能な場合、状況ロケーションは、exec サブルーチン中にプロセスが停止した場合は W_SEWTED (W) に設定され、fork サブルーチン中にプロセスが停止した場合は W_SFWTED (ファイル・システム) に設定されます。
複数のスレッドが同じ子プロセスの終了を待機して中断されている場合、厳密に 1 つのスレッドが子プロセスの終了時にプロセス状況を返します。
継続 オプションが設定されている場合、現行プロセスの子がジョブ制御停止を続行しても状況が報告されないときに、呼び出しは情報を返します。
パラメーター
| 項目 | 説明 |
|---|---|
| StatusLocation | sys/wait.h ファイルに定義されている、子プロセスの終了状況を含む整変数を指します。 |
| ProcessID | 子プロセスを指定します。 |
| オプション | サブルーチンの動作を変更します。 |
| ResourceUsage | 終了した子のリソース使用状況情報を使用して完了する構造の場所を指定します。 |
マクロ
待機、 ウェイトピッド、 wait3、または wait4() サブルーチンが返されるときに StatusLocation が指す値は、 <sys/wait.h> ファイルに定義されている以下のマクロの ReturnedValue パラメーターとして使用して、プロセスとその子プロセスに関する詳細情報を取得できます。
WIFCONTINUED(ReturnedValue)
pid_t ReturnedValue;ジョブ制御停止から続行する子プロセスの状況が返された場合は、ゼロ以外の値を返します。
WIFSTOPPED(ReturnedValue)
int ReturnedValue;停止した子に状況が返された場合は、ゼロ以外の値を返します。
int
WSTOPSIG(ReturnedValue)
int ReturnedValue;子が停止する原因となったシグナルの番号を戻します。
WIFEXITED(ReturnedValue)
int ReturnedValue;正常終了の状況が返された場合は、ゼロ以外の値を返します。
int
WEXITSTATUS(ReturnedValue)
int ReturnedValue;子の終了状況の下位 8 ビットを戻します。
WIFSIGNALED(ReturnedValue)
int ReturnedValue;異常終了の状況が返された場合は、ゼロ以外の値を返します。
int
WTERMSIG(ReturnedValue)
int ReturnedValue;子が終了する原因となったシグナルの番号を戻します。
戻り値
wait サブルーチンが失敗すると、値 -1 が戻され、エラーを示すために errno グローバル変数が設定されます。 さらに、 ウェイトピッド、 wait3、 wait364、および wait4 サブルーチンは、停止または終了した子プロセスがなく、 WNOハング オプションが指定されていた場合は、値 0 を戻します。 待機 サブルーチンは、停止または終了した子プロセスがない場合も、0 を戻します。
エラー・コード
以下のいずれかに該当する場合、 待機、 ウェイトピッド、 wait3、 wait364、および wait4 サブルーチンは失敗します。
| 項目 | 説明 |
|---|---|
| ECHILD | 呼び出しスレッドのプロセスに、既存の待機していない子プロセスがありません。 |
| EINTR | このサブルーチンは、シグナルの受信によって終了しました。 |
| EFAULT | StatusLocation または ResourceUsage パラメーターが、プロセスのアドレス・スペースの外側の位置を指しています。 |
ウェイトピッド および wait4 サブルーチンは、以下の条件が満たされている場合には失敗します。
| 項目 | 説明 |
|---|---|
| ECHILD | ProcessID パラメーターによって指定されたプロセスまたはプロセス・グループ ID が存在しないか、呼び出しプロセスの子プロセスではありません。 |
ウェイトピッド、 wait3、および wait4 サブルーチンは、以下の条件が満たされている場合には失敗します。
| 項目 | 説明 |
|---|---|
| EINVAL | オプション パラメーターの値が有効ではありません。 |