2010-12-30 8 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' &"); 

は、2番目のスクリプトは

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

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

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

2番目のスクリプトで '&'を削除していませんか?どちらの場合でもバックグラウンドプロセスを実行していないという意味ですか?おそらく最初のスクリプトをバックグラウンドで実行するつもりです...おそらく。 – Khez

+0

@Khezこれを投稿してからしばらく時間がかかりましたが、あなたが正しいと思うのですが、元のソリューションは最初のexec()コールでハードコードされていて、2番目のexecから取り除かれたので、終了コード。 –

+0

心配しないで、(バックグラウンドプロセスとは無関係の)類似のものを探して、受け入れられた答えを読んで、起こりうる問題を指摘する必要があると感じました... – Khez