2024 年日本 PHP 研討會

pcntl_waitid

(PHP 8 >= 8.4.0)

pcntl_waitid等待子行程狀態改變

說明

pcntl_waitid(
    int $idtype = P_ALL,
    ?int $id = null,
    array &$info = [],
    int $flags = WEXITED
): bool

取得呼叫者其中一個子行程的終止、停止和/或繼續事件的狀態資訊。

除非傳遞 WNOHANG 旗標,否則呼叫行程將會被阻擋,直到發生錯誤,或是取得滿足以下所有條件的狀態資訊:

  • 狀態資訊來自由 idtypeid 參數指定的子行程集合中的其中一個子行程。
  • 狀態資訊中的狀態變更與 flags 參數中設定的其中一個狀態變更旗標相符。

如果在呼叫 pcntl_waitid() 之前已有符合的狀態資訊可用,則會立即返回。如果有兩個或更多個子行程的符合狀態資訊可用,則回報其狀態的順序未指定。

注意事項:

此文件涵蓋 waitid 函式的 POSIX 規範,以及一些 Linux、NetBSD 和 FreeBSD 實作的額外參數。有關 waitid 在您的系統上如何運作的具體細節,請參閱系統的 waitid(2) 使用手冊。

參數

idtype
id
idtypeid 參數用於指定要等待的子行程。
POSIX 標準 idtypeid 參數
如果 idtypeP_ALL 則等待任何子行程,id 會被忽略。
如果 idtypeP_PID 則等待行程 ID 等於 id 的子行程。
如果 idtypeP_PGID 則等待行程群組 ID 等於 id 的任何子行程。
Linux 特有的 idtypeid 參數
如果 idtypeP_PIDFD(自 Linux 5.4 起) 則等待 id 中指定的 PID 檔案描述符所參考的子行程。(有關 PID 檔案描述符的更多資訊,請參閱 Linux 的 pidfd_open(2) 使用手冊。)
NetBSD 和 FreeBSD 特有的 idtypeid 參數
如果 idtypeP_UID 則等待有效使用者 ID 等於 id 的行程。
如果 idtypeP_GID 則等待有效群組 ID 等於 id 的行程。
如果 idtypeP_SID 則等待工作階段 ID 等於 id 的行程。如果子行程啟動了自己的工作階段,則其工作階段 ID 將與其行程 ID 相同。否則,子行程的工作階段 ID 將與呼叫者的工作階段 ID 相符。
FreeBSD 特有的 idtypeid 參數
如果 idtypeP_JAILID 則等待 jail 標識符等於 id 的 jail 內的行程。
info

info 參數會被設定為一個陣列,其中包含關於信號的資訊。

info 陣列可能包含以下鍵值:

  • signo:信號編號
  • errno:系統錯誤編號
  • code:信號代碼
  • status:退出值或信號
  • pid:發送信號的行程 ID
  • uid:發送信號行程的實際使用者 ID
  • utime:已消耗的使用者時間
  • stime:已消耗的系統時間

flags

flags 的值是由零個或多個以下常數進行 OR 運算的結果

flags 的可能值
WCONTINUED 對於任何從作業控制停止狀態繼續執行,且其狀態自繼續執行後尚未回報,或僅透過呼叫 pcntl_waitid() 並設定 WNOWAIT 旗標來回報狀態的子行程,都應回傳狀態。
WEXITED 等待已退出的行程。
WNOHANG 如果沒有可用的狀態,則不要掛起;立即返回。
WNOWAIT 將狀態返回到 info 中的行程保持在可等待狀態。這不應影響行程的狀態;在此呼叫完成後,可以再次等待該行程。
WSTOPPED 對於任何因收到信號而停止的子行程,且其狀態自停止後尚未回報,或僅透過呼叫 pcntl_waitid() 並設定 WNOWAIT 旗標來回報狀態的子行程,都應回傳狀態。

回傳值

如果指定了 WNOHANGidtypeid 指定的任何行程都沒有可用的狀態,則 pcntl_waitid() 會回傳 true

由於其中一個子行程的狀態改變,pcntl_waitid() 會回傳 true

否則,會回傳 false,並且可以使用 pcntl_get_last_error() 來取得 errno 錯誤編號。

注意事項:

取得 errno 錯誤編號後,可以使用 pcntl_strerror() 來取得與其相關聯的文字訊息。

錯誤/例外

錯誤編號 (errno) 值
ECHILD 呼叫的行程沒有任何尚未等待的子行程。
EINTR pcntl_waitid() 被信號中斷。
EINVAL flags 指定了無效值,或 idtypeid 指定了一組無效的行程。

另請參閱

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top