2012-12-13 152 views
0

關於此主題有幾個條目,例如hereenter,但沒有任何建議似乎工作。我這裏有一個例子:在Linux下運行php5後臺進程

$pid = shell_exec("nohup sleep 10 2> /dev/null & echo $!"); 
echo $pid; 

,我期望在後臺啓動一個新的命令sleep 10,並立即返回到shell。但是發現的行爲是這個代碼'等待'執行子命令sleep 10

如何在後臺運行我的commad作爲新的進程?

回答

0

根據nohup on the wikipedia page的一些說明,有些shell會拒絕關閉,除非所有的流都是空閒的。因此

一種解決方法是重新所有三個標準流:輸出,錯誤和輸入,就像下面的例子:

nohup ./myprogram > foo.out 2> foo.err < /dev/null & 

這僅僅是一種猜測,但很可能會在你的情況的情況下。

$pid = shell_exec("nohup sleep 10 > /dev/null 2> /dev/null < /dev/null & echo $!"); 
echo $pid; 

您可能想試試這個。我希望這是有用的,即使它不能回答你的問題。

+0

@Alex:好的,您刪除了您的評論:'$!'可能會從'nohup'返回PID,因爲這是後臺的命令。它現在爲你解決了嗎? – hakre