pcntl_waitpid

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

pcntl_waitpid等待或返回fork的子進(jìn)程狀態(tài)

說明

pcntl_waitpid(int $pid, int &$status, int $options = 0): int

掛起當(dāng)前進(jìn)程的執(zhí)行直到參數(shù)pid指定的進(jìn)程號(hào)的進(jìn)程退出, 或接收到一個(gè)信號(hào)要求中斷當(dāng)前進(jìn)程或調(diào)用一個(gè)信號(hào)處理函數(shù)。

如果pid指定的子進(jìn)程在此函數(shù)調(diào)用時(shí)已經(jīng)退出(俗稱僵尸進(jìn)程),此函數(shù) 將立刻返回。關(guān)于waitpid更詳細(xì)的規(guī)范請(qǐng)參見您系統(tǒng)的waitpid(2)手冊(cè)。

參數(shù)

pid

參數(shù)pid的值可以是以下之一:

pid可選值
< -1 等待任意進(jìn)程組ID等于參數(shù)pid給定值的絕對(duì)值的進(jìn)程。
-1 等待任意子進(jìn)程;與pcntl_wait函數(shù)行為一致。
0 等待任意與調(diào)用進(jìn)程組ID相同的子進(jìn)程。
> 0 等待進(jìn)程號(hào)等于參數(shù)pid值的子進(jìn)程。

注意:

指定-1作為pid的值等同于pcntl_wait() 提供(負(fù)的options)。

status

pcntl_waitpid()將會(huì)存儲(chǔ)狀態(tài)信息到status 參數(shù)上,這個(gè)通過status參數(shù)返回的狀態(tài)信息可以用以下函數(shù) pcntl_wifexited(), pcntl_wifstopped(), pcntl_wifsignaled(), pcntl_wexitstatus(), pcntl_wtermsig()以及 pcntl_wstopsig()獲取其具體的值。

options

如果您的操作系統(tǒng)(多數(shù)BSD類系統(tǒng))允許使用wait3,您可以提供可選的options 參數(shù)。如果這個(gè)參數(shù)沒有提供,wait將會(huì)被用作系統(tǒng)調(diào)用。如果wait3不可用,提供參數(shù) options不會(huì)有任何效果。options的值可以是0 或者以下兩個(gè)常量或兩個(gè)常量“或運(yùn)算”結(jié)果(即兩個(gè)常量代表意義都有效)。

options可用的值
WNOHANG 如果沒有子進(jìn)程退出立刻返回。
WUNTRACED 子進(jìn)程已經(jīng)退出并且其狀態(tài)未報(bào)告時(shí)返回。

返回值

pcntl_waitpid()返回退出的子進(jìn)程進(jìn)程號(hào),發(fā)生錯(cuò)誤時(shí)返回-1,如果提供了 WNOHANG作為option(wait3可用的系統(tǒng))并且沒有可用子進(jìn)程時(shí)返回0。

參見

  • pcntl_fork() - 在當(dāng)前進(jìn)程當(dāng)前位置產(chǎn)生分支(子進(jìn)程)。譯注:fork是創(chuàng)建了一個(gè)子進(jìn)程,父進(jìn)程和子進(jìn)程 都從fork的位置開始向下繼續(xù)執(zhí)行,不同的是父進(jìn)程執(zhí)行過程中,得到的fork返回值為子進(jìn)程 號(hào),而子進(jìn)程得到的是0。
  • pcntl_signal() - 安裝一個(gè)信號(hào)處理器
  • pcntl_wifexited() - 檢查狀態(tài)代碼是否代表一個(gè)正常的退出。
  • pcntl_wifstopped() - 檢查子進(jìn)程當(dāng)前是否已經(jīng)停止
  • pcntl_wifsignaled() - 檢查子進(jìn)程狀態(tài)碼是否代表由于某個(gè)信號(hào)而中斷
  • pcntl_wexitstatus() - 返回一個(gè)中斷的子進(jìn)程的返回代碼
  • pcntl_wtermsig() - 返回導(dǎo)致子進(jìn)程中斷的信號(hào)
  • pcntl_wstopsig() - 返回導(dǎo)致子進(jìn)程停止的信號(hào)