3

実行している次のコマンドを含むphpスクリプトがあります。

exec("pgrep -fl ./build-dh", $output, $return);

実行中の「./build-dh」プロセスが見つからない場合、pgrep は通常「1」を返しますが、プロセスが実行されていないと確信している場合でも、常に「0」を返します。

$output から得られるものは次のとおりです。

Array ( [0] => 28560 sh -c pgrep -fl ./build-dh )

これは、独自のpidを出力していることを意味します。これは、何があっても「0」のリターンコードを強制すると思います。シェルで次を実行すると、正常に動作します。

$pgrep -fl ./build-dh
$echo $?
1

したがって、戻り値は正常に機能します...そして、これを実行すると:

 $pgrep -f nginx
11192
11193
11194
11195
11196
$echo $?
0

PHPでこれを正しく機能させるにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

$output幸いなことに、修正にそれほど時間はかからず$result、exec から CLI で得られるものにより近いものになります。

foreach($output as $oi=>$o) if(strpos($o,'pgrep')!==false) unset($output[$oi]);
$return = !count($output); 
于 2012-08-03T22:35:08.897 に答える