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

使用pgrep返回值的PHP exec命令不正确,php,exec,grep,Php,Exec,Grep,我有一个php脚本,正在运行以下命令: exec("pgrep -fl ./build-dh", $output, $return); 如果pgrep没有发现正在运行的“/build dh”进程,它通常会返回“1”,但是,即使我确定该进程没有运行,它也总是返回“0” 以下是我从$output中获得的信息: Array ( [0] => 28560 sh -c pgrep -fl ./build-dh ) 这意味着它正在输出自己的pid,我猜不管发生什么,它都会强制执行“0”返回代码。当

我有一个php脚本,正在运行以下命令:

exec("pgrep -fl ./build-dh", $output, $return);
如果pgrep没有发现正在运行的“/build dh”进程,它通常会返回“1”,但是,即使我确定该进程没有运行,它也总是返回“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中正确工作


感谢

幸运的是,从exec修复
$output
$result
与您在CLI中得到的更为相似并不需要花费太多时间:

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

尝试键入
build dh
的完整路径应该无关紧要,因为pgrep正在搜索正在运行的进程,不启动任何东西,不需要任何路径。谢谢,这比我要做的更好,我只是扔掉第一个结果,每次第一个结果都是它自己。只是让我觉得它在php中没有正常工作。是的,我也觉得有点奇怪。但老实说,我更惊讶的是CLI没有显示pgrep。我倾向于通过管道将ps发送到grep而不是pgrep,所以我习惯于在结果中看到grep。。顺便说一句,这是一个很好的问题。是的,我专门使用pgrep,因为它没有在CLI:D中显示这一点。我最初准备使用“ps aux|grep./build dh|grep-v grep”来查看它是否可以正常工作。然而,我太专注于pgrep了,甚至没有尝试它:D