PHP exec命令使用pgrep返回值不正确

时间:2012-08-03 21:46:54

标签: php exec grep

我有一个PHP脚本,其中包含以下命令:

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

pgrep通常会返回“1”,如果它没有找到“./build-dh”进程正在运行,但是,它总是返回“0”,即使我肯定该进程没有运行。

以下是我从$ output获得的信息:

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

这意味着它正在输出它自己的pid,无论如何我都会强制使用“0”返回代码。当我在shell中运行以下代码时,它可以正常工作:

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

所以返回值工作得很好......当我运行它时:

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

如何在PHP中正常运行?

由于

1 个答案:

答案 0 :(得分:0)

幸运的是,从exec中修复$output$result与更接近CLI中的内容并不需要太多:

foreach($output as $oi=>$o) if(strpos($o,'pgrep')!==false) unset($output[$oi]);
$return = !count($output);