2011-01-20 7 views
2

음을 반환 항상 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); 

내가 오류를 찾기 위해 신호를 사용할 수 있습니다 true를 반환 pcntl_wifexited,하지만 난 pcntl_wifexited 뭐가 잘못하지 않는다().

이것은 WNOHANG 옵션과 관련이 있습니까?

+2

LOL 약 ninja 코드! –

+0

자식 상태 코드가 정상 종료를 나타내는 경우 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다. –

답변

0

pcntl_waitpid가 정상적인 waitpid 호출과 비슷하게 동작한다고 생각합니다.

WNOHANG은 프로세스가 종료되지 않으면 waitpid가 0을 반환하도록 강제합니다. [0 시간 초과와 비슷합니다].

따라서 종료 코드는 정상적으로 보입니다.

+0

나는 이것이 옳다고 생각한다. 따라서'WNOHANG'을 사용하려면'pcntl_wstopsig ($ status)'를 사용해야합니다. – DEY

관련 문제