(PHP 8 >= 8.4.0)
pcntl_waitid — 子プロセスの状態変化を待つ
$idtype = P_ALL,$id = null,&$info = [],$flags = WEXITED,&$resource_usage = []呼び出し元の子プロセスにおける 終了、停止、 および/または 継続イベントに関連するステータス情報を取得します。
WNOHANG フラグを渡さない限り、
呼び出し元のプロセスはエラーが発生するか、
以下を全て満たすステータス情報が利用できるようになるまでブロックします。
idtype と id
で指定された一連の子プロセスのうちの、
いずれかの子プロセスのステータス情報であること
flags で設定した状態変化フラグのひとつにマッチすること
マッチしたステータス情報が、pcntl_waitid() の呼び出し前に利用可能になった場合、 呼び出しは直ぐに返ります。 マッチしたステータス情報がふたつ以上の子プロセスで利用可能になった場合、 それらのステータスの順番は不定です。
注意:
このドキュメントは
waitid関数の POSIX 仕様を満たしていますし、 Linux, NetBSD, FreeBSD に特有の追加パラメータもいくつか満たしています。 システムでwaitidがどのように動作するかの詳細は、 システムのwaitid(2)のマニュアルを参照ください。
idtypeididtype と id は、
どの子プロセスを待つのかを指定するのに使います。
idtype が P_ALL の場合 |
全ての子プロセスを待ちます。id は無視されます。
|
idtype が P_PID の場合 |
プロセスID が id に等しい子プロセスを待ちます。
|
idtype が P_PGID の場合 |
プロセスグループID が id に等しいすべての子プロセスを待ちます。
|
idtype が P_PIDFD の場合(Linux 5.4 以降) |
id で指定した
PID ファイルディスクリプタで参照している子プロセスを待ちます。
(PID ファイルディスクリプタに関する詳しい情報は、
Linux の pidfd_open(2) man ページを参照ください)
|
idtype が P_UID の場合
|
実効ユーザーID が id
に等しいプロセスを待ちます。
|
idtype が P_GID の場合
|
実効グループID が id
に等しいプロセスを待ちます。
|
idtype が P_SID の場合
|
セッションID が id に等しいプロセスを待ちます。
子プロセスが自分自身のセッションを開始していた場合、
そのセッションIDはプロセスIDと等しくなります。
そうでない場合、子プロセスのセッションIDは、
呼び出し側のセッションIDとマッチします。
|
idtype が P_JAILID の場合
|
jail の識別子が id に等しい
jail 中のプロセスを待ちます。
|
info
info には、
シグナルに関する情報を含めた情報を設定します。
info 配列には、以下のキーが含まれています:
signo: Signal numbererrno: System error numbercode: Signal codestatus: Exit value or signalpid: Sending process IDuid: Real user ID of sending processutime: User time consumedstime: System time consumedflags
flags は、以下の定数を0個以上 OR で結んだ値です。
WCONTINUED |
以下にあてはまる任意の子プロセスについて、その状態が返されます:
ジョブの制御停止から動作が継続して以降、
そのステータスが報告されていないか、
pcntl_waitid() を
WNOWAIT
フラグ付きで呼び出したことによってのみステータスが報告された子プロセス。
|
WEXITED |
終了したプロセスを待つ |
WNOHANG |
ステータスが利用可能でない場合でもハングしない。 つまり、すぐに制御を戻します。 |
WNOWAIT |
info で返されたプロセスの状態が
waitable な状態であってもそのままにする。
これはプロセスの状態に影響しません。つまり、
この関数呼び出しが完了した後、
プロセスを再度待つことができるということです。
|
WSTOPPED |
シグナルを受け取って停止した子プロセスについて、
そのステータスが報告されていないか、
pcntl_waitid() を
WNOWAIT
フラグ付きで呼び出したことによってのみに報告された場合、
その子プロセスの状態が返されます。
|
resource_usage
resource_usage には、
子プロセスからリソース利用状況の統計を含めた配列を設定します。
この情報は、(FreeBSD のように)wait6 システムコールが利用可能な場合か、
生の waitid システムコールを利用できる Linux でサポートされています。
WNOHANG が指定されており、
かつ idtype と id
で指定された任意のプロセスでステータスが利用できない場合
pcntl_waitid() は true を返します。
子プロセスのうちのひとつで、
状態が変化した場合、
pcntl_waitid() は true を返します。
上記以外の場合、false が返され、
エラー番号 errno を取得するために
pcntl_get_last_error() が使えます。
注意:
エラー番号
errnoが取得できた場合、 それに関連付けられたテキストメッセージを取得するために pcntl_strerror() が使えます。
ECHILD |
呼び出し側のプロセスには、待っていない子プロセスはありません。 |
EINTR |
pcntl_waitid() がシグナルで割り込まれました。 |
EINVAL |
flags に不正な値が指定されたか、
idtype と id
で不正なプロセスのセットを指定しました。
|