2011-01-20 11 views
2

まあを返すpcntl_wifexited子プロセスはエラーで終了するかもしれませんが、常に)私は、エラーを見つけるために信号を使用することができますが、私は(pcntl_wifexitedと間違っているものを得ることはありません真は常に真

<?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約忍者コード! –

+0

子ステータスコードが通常の終了を表す場合はTRUEを返し、それ以外の場合はFALSEを返します。 –

答えて

0

私はpcntl_waitpidが通常のwaitpid呼び出しと同様に動作すると考えています。

WNOHANGは、プロセスが終了しなければwaitpidを強制的に0に戻します[タイムアウトはゼロに近い]。

したがって、終了コードは正常であるように見えます。

+0

これが正しいと思います。したがって 'WNOHANG'では' pcntl_wstopsig($ status) 'を使うべきです。 – DEY