(PHP 8 >= 8.4.0)
pcntl_waitid — 等待子行程狀態改變
取得呼叫者其中一個子行程的終止、停止和/或繼續事件的狀態資訊。
除非傳遞 WNOHANG
旗標,否則呼叫行程將會被阻擋,直到發生錯誤,或是取得滿足以下所有條件的狀態資訊:
idtype
和 id
參數指定的子行程集合中的其中一個子行程。
flags
參數中設定的其中一個狀態變更旗標相符。
如果在呼叫 pcntl_waitid() 之前已有符合的狀態資訊可用,則會立即返回。如果有兩個或更多個子行程的符合狀態資訊可用,則回報其狀態的順序未指定。
注意事項:
此文件涵蓋
waitid
函式的 POSIX 規範,以及一些 Linux、NetBSD 和 FreeBSD 實作的額外參數。有關waitid
在您的系統上如何運作的具體細節,請參閱系統的waitid(2)
使用手冊。
idtype
id
idtype
和 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) 使用手冊。) |
如果 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
:信號編號errno
:系統錯誤編號code
:信號代碼status
:退出值或信號pid
:發送信號的行程 IDuid
:發送信號行程的實際使用者 IDutime
:已消耗的使用者時間stime
:已消耗的系統時間flags
flags
的值是由零個或多個以下常數進行 OR 運算的結果
WCONTINUED |
對於任何從作業控制停止狀態繼續執行,且其狀態自繼續執行後尚未回報,或僅透過呼叫 pcntl_waitid() 並設定 WNOWAIT 旗標來回報狀態的子行程,都應回傳狀態。 |
WEXITED |
等待已退出的行程。 |
WNOHANG |
如果沒有可用的狀態,則不要掛起;立即返回。 |
WNOWAIT |
將狀態返回到 info 中的行程保持在可等待狀態。這不應影響行程的狀態;在此呼叫完成後,可以再次等待該行程。 |
WSTOPPED |
對於任何因收到信號而停止的子行程,且其狀態自停止後尚未回報,或僅透過呼叫 pcntl_waitid() 並設定 WNOWAIT 旗標來回報狀態的子行程,都應回傳狀態。 |
如果指定了 WNOHANG
且 idtype
和 id
指定的任何行程都沒有可用的狀態,則 pcntl_waitid() 會回傳 true
。
由於其中一個子行程的狀態改變,pcntl_waitid() 會回傳 true
。
否則,會回傳 false
,並且可以使用 pcntl_get_last_error() 來取得 errno
錯誤編號。
注意事項:
取得
errno
錯誤編號後,可以使用 pcntl_strerror() 來取得與其相關聯的文字訊息。
ECHILD |
呼叫的行程沒有任何尚未等待的子行程。 |
EINTR |
pcntl_waitid() 被信號中斷。 |
EINVAL |
為 flags 指定了無效值,或 idtype 和 id 指定了一組無效的行程。 |