2012-09-17 24 views
0

我第一次執行下面的命令,查找創建PHP進程的PID在PHP

$retVal = proc_close(proc_open("rfcomm connect \/dev\/rfcomm0 &> /dev/null 2> /dev/null &", array(), $pipe)); 

我有proc_open後立即proc_close使用或命令掛起我的PHP頁面。後來在我的劇本,如果我試圖找出這個後臺進程的PID我只得到回到我的grep要求:

$val = shell_exec("ps aux | grep rfcomm0"); 

它只返回我的grep命令的過程:

www數據6412 0.0 0.3 2004 624?小號12:23 0:00 grep的rfcomm0

現在,如果我進入從了shell_exec相同的指令到我的服務器上我的SSH終端,我得到以下幾點:

www-data 6047 0.0 0.3 1752 592 ?  S 12:10 0:00 rfcomm connect /dev/rfcomm0 
root  6415 0.0 0.4 3532 804 pts/1 S+ 12:27 0:00 grep rfcomm0 

的第一個結果是PID我想要。 PHP無法檢索自己的進程的PID還是有另一種方法來解決這個謎團?

謝謝!

回答

2

可以使用proc_get_status得到PID ...

http://php.net/manual/en/function.proc-get-status.php

該函數返回一個數組,它的一個元素是PID。它的輸入參數是proc_open的返回...

+0

剛剛還發現了,但是pid相差一個。例如,該函數返回6622,但實際的PID(如果我看着ps aux)是6623.奇怪的是嗎? – DanFritz

+0

proc_get_status有很多關於錯誤PID的錯誤報告,也許php版本升級可以解決這個問題? – Night2

+0

我剛剛在最後加了+1,10次之後它總是返回相同的錯誤。謝謝! – DanFritz