2010-12-30 5 views
4

exec ($ cmd, $ output, $ exitCode)를 통해 백그라운드에서 실행되는 PHP 스크립트의 종료 상태 코드를 얻는 방법이 있습니까? 예를 들어PHP에서 스크립트 종료 상태 코드 얻기

:

은 후행 '&은'후 예상대로 ExitCode를 작동 $ 포함되지 않습니다
exec('php script.php &', $output, $exitCode); 

경우는 0, 그렇지 않으면 항상.

+2

긍정적되지 같은 것을 보이지만, 백그라운드에서 실행되는 경우 내가 생각, 다음 코드는 이동합니다 실행되므로 반환 된 상태 코드를 가져올 방법이 없습니다. – dqhendricks

+1

'0'은 프로세스가 백그라운드로 성공적으로 전송되었음을 의미합니다. –

+0

이 링크를 참조하십시오 http://stackoverflow.com/questions/1533675/php-exec-return-value-for-background-process-linux –

답변

4

여기에 자신을 찾는 사람이라면 저의 해결책은 스크립트를 인수로 사용하는 PHP 스크립트를 만드는 것입니다. 새 스크립트는 백그라운드에서 호출되며 종료 상태를 적절하게 처리합니다. 예를 들어

이 : 호출 된 스크립트가 완료되기 전에

$cmd = 'php asynchronous_script.php -p 1'; 
exec("php script_executor.php -c'$cmd' &"); 

두 번째 스크립트가

$opts = getOpt('c:'); 
$cmd = rtrim($opts['c'], '&'); 
$exitCode = 0; 
$output = ''; 

exec($cmd, $output, $exitCode); 

if ($exitCode > 0) { 
... 
} 
+1

두 번째 스크립트에서'&'를 제거하지 않습니까? 두 경우 모두 백그라운드 프로세스를 실행하지 않는다는 의미입니까? 아마도 백그라운드에서 첫 번째 스크립트를 실행하려고했을 것입니다. 아마도. – Khez

+0

@Khez이 글을 올린 지 꽤 오랜 시간이 걸렸지 만 본인이 옳다고 생각합니다. 원래 솔루션은 첫 번째 exec() 호출에서 하드 코딩 된 코드를 가지고 있으며 두 번째 코드에서 제거하여 종료 코드를 처리 할 수있었습니다. . –

+0

걱정하지 않으셔도됩니다. (백그라운드 프로세스와 관련이없는) 비슷한 것을 찾고, 대답을 읽고 가능한 문제를 지적 할 필요성을 느꼈습니다 ... – Khez