2012-05-15 75 views
3

我試圖找到我從php網頁製作的後臺系統調用的PID。如果我從PHP腳本中調用'ps -A'並將其打印到瀏覽器中,則它不具有與從終端調用'ps -A'相同的輸出。這是特別令人沮喪的,因爲我可以看到PHP從我的終端調用的後臺進程的PID,但不能從PHP中調用。PHP獲取系統()命令的PID

換句話說,我的代碼看起來是這樣的:

system("process &"); 
system("ps -A"); 

但是,這並不產生相同的輸出作爲調用來自終端「PS -A」。不僅如此,'流程'顯示在終端中,而不是來自PHP調用。

有人可以向我解釋爲什麼這是,我怎麼能從我的PHP代碼中獲得'process'的PID? (爲了記錄,我也嘗試過使用代碼的變體,包括使用exec()和passthru(),其中沒有一個已經工作到目前爲止。)

謝謝。

+0

一種選擇是使用[proc_open和proc_get_status(http://stackoverflow.com/a/4731666/82769) –

回答

2
echo $! 

將獲得最後一個命令的PID,所以..

system("process & echo $!"); 
+0

這個建議聽起來像是可行的,但事實並非如此。相反,它開始打印一個錯誤,它無法打開它應該打開的文件('process'從文件獲取輸入並將輸出重定向到文件中)。我的其他任何嘗試都沒有產生這個錯誤。 – MattS

+0

好,如果它有爭議,你通過它們嗎?只需用「echo $!」替換第二個系統調用即可並像以前一樣離開第一個 – miki

+0

我沒有通過參數。我只是嘗試單獨調用它們(現在它是exec(「進程&"); system(」echo $!「)),並且沒有任何內容從系統(回顯)調用中打印出來。爲什麼會這樣? – MattS