2011-01-20 125 views
2

井子進程可能會因錯誤退出,但pcntl_wifexited總是返回truepcntl_wifexited總是返回true

<?php 

//Sample code : 
$child_pid = pcntl_fork(); 

if ($child_pid === 0) 
{ 
    //This is child process 

    $my_var = rand(1,5); 

    if($my_var == 2) 
    { 
     //2 is not allowed 
     exit(1); //exit with error 
    } 

    if($my_var == 4) 
    { 
     //4 is unknown 
     i_crash_now(); //crash 
    } 

    echo 'end of child' . "\n"; 
    exit(0); //exit standard 

} 
else 
{ 
    sleep(1); //waiting for child with ninja code (don't do that at home, this was made by professional ninjas) 
    pcntl_waitpid($child_pid, $status, WNOHANG); 

    var_dump(pcntl_wstopsig($status)); //in case 2 > 1, in case 4 > 255, else 0 
    var_dump(pcntl_wifexited($status)); //always true; 
} 

exit(0); 

我可以使用信號來發現錯誤,但我沒有得到與pcntl_wifexited什麼是錯的()。

這是否與WNOHANG選項有關?

+2

關於忍者代碼的LOL! – 2011-01-20 17:24:31

+0

如果子狀態碼錶示正常退出,則返回TRUE,否則返回FALSE。 – 2011-01-20 18:06:17

回答

0

我想象pcntl_waitpid行爲類似於正常的waitpid調用。

如果沒有進程終止,WNOHANG會強制waitpid返回0 [類似於零超時]。

因此,退出代碼將顯示爲正常。