OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (下巻)


前へ 次へ 目次 索引



wait4

子プロセスが停止または終了するのを待ちます。

形式

#include <wait.h>

pid_t wait4 (pid_t process_id, union wait *status_location, int options, struct rusage *resource_usage);


引数

status_location

<wait.h>ヘッダ・ファイルに定義されている,子プロセスの終了状態を含んでいる位置へのポインタ。

OpenVMS バージョン 7.2 およびそれ以降, _VMS_WAIT マクロを定義してコンパイルした場合, wait4関数は status_location 引数で指定されたアドレスに,子プロセスの OpenVMS 完了コードを格納するようになりました。

process_id

子プロセスまたは子プロセスのセット。

options

関数の動作を変更するフラグ。これらのフラグの定義は,説明のセクションに示しています。

resource_usage

終了した子プロセスのリソース利用情報を含んでいる構造体の位置。

説明

wait4関数は,要求が完了するまで呼び出し元プロセスを一時停止します。

process_id 引数により,呼び出し元プロセスは,次の規則に従って特定の子プロセスのセットの状態を収集することができます。

process_id の値 要求される状態
- 1 に等しい 任意の子プロセス。この点で, waitpid 関数は wait 関数と等価である。
0 よりも大きい 1 つの子プロセスについて,プロセス ID を指定する。

wait4関数は,このセットの子プロセスの状態のみを返します。

options 引数は wait4関数の動作を変更します。 options 引数のフラグは,ビット論理和を指定することで組み合わせることができます。以下にフラグを示します。

WNOWAIT status_location に状態が返されるプロセスを,待機可能状態に置くよう指定する。このプロセスを再び待っても,同じ結果が得られる。
WNOHANG 呼び出し元プロセスが一時停止しないようにする。停止または終了した子プロセスが複数存在する場合には, WNOHANG フラグが指定されなかった場合と同様に,そのうちの 1 つが選ばれ, waitpid 関数はその子プロセスのプロセス ID を返す。終了したプロセスが存在しない ( つまり, waitpid が呼び出し元プロセスを WNOHANG フラグなしで一時停止した) 場合には, 0 (ゼロ) が返される。プロセス 0 を待つことはできないので,この戻り値から混乱が生じることはない。
WUNTRACED 子プロセスが SIGTTIN,SIGTTOU,SIGSTOP,または SIGTSTOP シグナルを受信したために,カレント・プロセスの子プロセスが停止したときに,呼び出しに追加情報を返させるように指定する。

wait4関数が,子プロセスの状態が入手可能であるために返った場合には,子プロセスのプロセス ID が返されます。情報は,status_location が null でなければ,このポインタがポイントしている位置に格納されます。

status_location がポイントする位置に格納される値が 0 (ゼロ) になるのは,状態が以下のいずれかを行った終了した子プロセスから返された場合に限られます。

status_location の値にかかわらず,この情報は, <wait.h>ヘッダ・ファイルに定義されている,整数式に評価されるマクロを使って定義することができます。以下のマクロの説明では,status_value 引数は status_location 引数がポイントしている整数値と等しい値です。

WIFEXITED (status_value ) 正常に終了した子プロセスの状態が返された場合に,ゼロ以外の値に評価される。
WEXITSTATUS (status_value ) WIFEXITED (status_value ) の値がゼロ以外である場合,このマクロは,子プロセスが _exit または exit 関数に渡した status 引数の下位 8 ビットか,子プロセスが main 関数から返した値に評価される。
WIFSIGNALED (status_value ) キャッチされなかったシグナルが受信されたために終了した子プロセスの状態が返された場合に,ゼロ以外の値に評価される。
WTERMSIG (status_value ) WIFSIGNALED (status_value ) の値がゼロ以外である場合,このマクロは,子プロセスを終了させたシグナルの番号に評価される。
WIFSTOPPED (status_value ) 現在停止している子プロセスの状態が返された場合に,ゼロ以外の値に評価される。
WSTOPSIG (status_value ) WIFSTOPPED (status_value ) の値がゼロ以外である場合,このマクロは,子プロセスを停止させたシグナルの番号に評価される。
WIFCONTINUED (status_value ) 実行を再開した子プロセスの状態が返された場合に,ゼロ以外の値に評価される。

status_location がポイントする位置に格納された情報が, WUNTRACEDフラグを指定した wait4呼び出しによって格納されていた場合には,以下のいずれかのマクロがゼロ以外の値に評価されます。

status_location がポイントする位置に格納された情報が, WUNTRACEDフラグを指定しない wait4呼び出しによって格納されていた場合には,以下のいずれかのマクロがゼロ以外の値に評価されます。

wait4関数は wait3関数に似ています。ただし, wait4関数は process_id 引数によって指定された特定の子プロセスを待ちます。resource_usage 引数は, <resource.h>ヘッダ・ファイルに定義されている子プロセスのリソース使用情報を含んだ位置をポイントします。

exit_exitも参照してください。


戻り値

0 成功を示します。停止または終了した子プロセスは存在せず, WNOHANG オプションが指定されています。
x 子プロセスの process_id。子プロセスの状態が取得可能です。
- 1 エラーを示します。 errno は以下のいずれかの値に設定されます。

  • ECHILD---待機すべき子プロセスが存在しない。

  • EINTR---呼び出し元プロセスがキャッチしたシグナルの受信によって終了した。

  • EFAULT--- status_location または resource_usage 引数は,プロセスのアドレス空間の外の位置をポイントしている。

  • EINVAL--- options 引数の値が無効である。


waitpid

子プロセスが終了または停止するのを待ちます。

形式

#include <wait.h>

pid_t waitpid (pid_t process_id, int *status_location, int options);


引数

process_id

子プロセスまたは子プロセスのセット。

status_location

<wait.h>ヘッダ・ファイルに定義されている,子プロセスの終了状態を含んでいる位置へのポインタ。

OpenVMS バージョン 7.2 およびそれ以降, _VMS_WAIT マクロを定義してコンパイルした場合, waitpid関数は status_location 引数で指定されたアドレスに,子プロセスの OpenVMS 完了コードを格納するようになりました。

options

関数の動作を変更するフラグ。これらのフラグの定義は,説明のセクションに示しています。

説明

waitpid関数は,要求が完了するまで呼び出し元プロセスを一時停止します。呼び出し元スレッドのみが一時停止するように再定義を行います。

process_id 引数が - 1 で, options 引数が 0 の場合, waitpid関数は wait関数と同じように動作します。これらの引数が他の値を持つ場合, waitpid関数はこれらの値の指定に従って変更されます。

process_id 引数により,呼び出し元プロセスは,次の規則に従って特定の子プロセスのセットの状態を収集することができます。

process_id の値 要求される状態
- 1 に等しい 任意の子プロセス。この点で, waitpid 関数は wait 関数と等価である。
0 よりも大きい 1 つの子プロセスについて,プロセス ID を指定する。

waitpid関数は,このセットの子プロセスの状態のみを返します。

options 引数は waitpid関数の動作を変更します。 options 引数のフラグは,ビット論理和を指定することで組み合わせることができます。以下にフラグを示します。

WCONTINUED process_id 引数で指定された子プロセスのうち,実行が再開されてから状態が報告されていないすべての子プロセスの状態を呼び出し元プロセスに返すよう指定する。
WNOWAIT status_location に状態が返されるプロセスを,待機可能状態に置くよう指定する。このプロセスを再び待っても,同じ結果が得られる。
WNOHANG 呼び出し元プロセスが一時停止しないようにする。停止または終了した子プロセスが複数存在する場合には, WNOHANG フラグが指定されなかった場合と同様に,そのうちの 1 つが選ばれ, waitpid 関数はその子プロセスの PID を返す。終了したプロセスが存在しない ( つまり, waitpid が呼び出し元プロセスを WNOHANG フラグなしで一時停止した) 場合には, 0 ( ゼロ ) が返される。プロセス 0 を待つことはできないので,この戻り値から混乱が生じることはない。
WUNTRACED 子プロセスが SIGTTIN,SIGTTOU,SIGSTOP,または SIGTSTOP シグナルを受信したために,カレント・プロセスの子プロセスが停止したときに,呼び出しに追加情報を返させるように指定する。

waitpid関数が,子プロセスの状態が入手可能であるために返った場合には,子プロセスのプロセス ID が返されます。情報は,status_location が null でなければ,このポインタがポイントしている位置に格納されます。 status_location がポイントする位置に格納される値が 0 になるのは,状態が以下のいずれかを行った終了した子プロセスから返された場合に限られます。

status_location の値にかかわらず,この情報は, <wait.h>ヘッダ・ファイルに定義されている,整数式に評価されるマクロを使って定義することができます。以下のマクロの説明では, status_value 引数は status_location 引数がポイントしている整数値と等しい値です。

WIFEXITED (status_value ) 正常に終了した子プロセスの状態が返された場合に,ゼロ以外の値に評価される。
WEXITSTATUS (status_value ) WIFEXITED (status_value ) の値がゼロ以外である場合,このマクロは,子プロセスが _exit または exit 関数に渡した status 引数の下位 8 ビットか,子プロセスが main 関数から返した値に評価される。
WIFSIGNALED (status_value ) キャッチされなかったシグナルが受信されたために終了した子プロセスの状態が返された場合に,ゼロ以外の値に評価される。
WTERMSIG (status_value ) WIFSIGNALED (status_value ) の値がゼロ以外である場合,このマクロは,子プロセスを終了させたシグナルの番号に評価される。
WIFSTOPPED (status_value ) 現在停止している子プロセスの状態が返された場合に,ゼロ以外の値に評価される。
WSTOPSIG (status_value ) WIFSTOPPED (status_value ) の値がゼロ以外である場合,このマクロは,子プロセスを停止させたシグナルの番号に評価される。
WIFCONTINUED (status_value ) 実行を再開した子プロセスの状態が返された場合に,ゼロ以外の値に評価される。

status_location がポイントする位置に格納された情報が, WUNTRACEDフラグを指定した waitpid呼び出しによって格納されていた場合には,以下のいずれかのマクロがゼロ以外の値に評価されます。

status_location がポイントするバッファに格納された情報が, WUNTRACEDフラグを指定しない waitpid呼び出しによって格納されていた場合には,以下のいずれかのマクロがゼロ以外の値に評価されます。

親プロセスが,すべての子プロセスが終了するのを待たずに終了した場合,残った子プロセスには, init プロセスのプロセス ID に等しい親プロセス ID が割り当てられます。

exit_exit,および waitも参照してください。


戻り値

0 成功を示します。 WNOHANG オプションが指定されており,停止または終了した子プロセスがなかった場合にも, waitpid 関数は値 0 を返します。
- 1 エラーを示します。 errno は以下のいずれかの値に設定されます。

  • ECHILD---呼び出し元プロセスは,既存の待たれていない子プロセスを持っていない。 process_id 引数によって指定されたプロセスまたはプロセス・グループ ID が存在しない,または呼び出し元プロセスの子プロセスでない。

  • EINTR---関数は受信したシグナルによって終了させられた。

    waitpid 関数が,子プロセスの状態が取得可能であったために返った場合には,子プロセスのプロセス ID が呼び出し元プロセスに返される。呼び出し元プロセスがシグナルをキャッチしたために返った場合には, - 1 が返される。

  • EFAULT--- status_location 引数は,プロセスのアドレス空間の外の位置をポイントしている。

  • EINVAL--- options 引数の値が無効である。


前へ 次へ 目次 索引