2012-08-03 82 views
3

我有以下命令我運行一個PHP腳本:PHP exec命令因此,使用pgrep返回值不正確

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

p纖ep通常返回「1」,如果它沒有找到一個「./build-dh」進程運行,但是,它總是返回「0」,即使我肯定進程沒有運行。

以下是我從$輸出得到:

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?

感謝

+0

嘗試鍵入全路徑'構建-dh' – alfasin 2012-08-03 21:51:47

+0

應該不重要,因爲pgrep正在搜索正在運行的進程,不會啓動任何內容,也不需要路徑。 – deranjer 2012-08-03 21:57:20

回答

0

幸運的是,它並不需要很多工作來解決從EXEC $output$result,使其更接近你的CLI獲得:

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

謝謝,這比我打算做的要好,這只是丟棄了第一個結果,並且每次第一次結果都是數字。只是搞砸了,它不是在PHP工作,它應該。 – deranjer 2012-08-04 03:04:59

+0

是的,我發現它也有點奇怪。但說實話,我更驚訝CLI沒有顯示pgrep。我傾向於使用ps來管理grep,而不是使用pgrep,所以我習慣在結果中看到grep。 ..一個偉大的問題順便說一句。 – ghbarratt 2012-08-04 17:41:53

+0

是的,我正在使用pgrep,因爲它沒有在CLI中顯示:D。我最初準備使用「ps aux | grep ./build-dh | grep -v grep」來查看沒有問題的情況。但是我對於pgrep的注意力並沒有嘗試過:D – deranjer 2012-08-04 21:01:19