2013-04-25 53 views
1

我有一個PHP腳本,我從CLI運行。在Ubuntu中,我怎樣才能從PHP執行多個同步終端?

腳本我有以下的循環中:

foreach($array as $key => $value){ 

    exec("gnome-terminal -e php myscript.php $key $value > /dev/null"); 

} 

我所期待發生的是,新的終端會彈出並運行我的腳本和相關參數在不同的終端窗口同時進行。

能夠可視化數據只是爲了調試。在確認腳本正常工作後,我想使用此命令在後臺運行它:

exec("php myscript.php $key $value" > /dev/null &); 

但是,兩者都沒有按預期工作。第二個命令即使運行,仍然會等待第一個腳本完成,然後才能進入下一個循環。

我使用的是Ubuntu 12.04。我怎樣才能讓它們同時運行以進行調試,然後在不同時在後臺同時默默地運行?

+1

既然你運行的另一個PHP過程中,你有沒有考慮過使用叉? http://php.net/manual/en/function.pcntl-fork.php – 2013-04-25 09:45:40

+0

嘗試添加'&'將gnome-terminal啓動到後臺。 – 2013-04-25 09:46:38

+0

@therefromhere我不熟悉pcntl_fork()。 php.net文檔對我來說不是很清楚。你能舉一個如何使用它的例子嗎? – user658182 2013-04-25 09:53:42

回答

0

一個問題可能是:網絡服務器在與您不同的用戶下運行。它不知道X-Server的位置,X-Server通常不允許來自不同用戶的連接。所以你必須做兩件事:

你必須確保在從PHP運行gnome終端時設置DISPLAY變量。這應該這樣做:

exec("DISPLAY=":0" gnome-terminal -e php myscript.php $key $value > /dev/null &"); 

您必須允許遠程連接。您可以在運行於X會話中的終端上使用xhost +來完成此操作,但這會允許所有連接,因此請小心。

+0

從我對他的問題的理解中,代碼很好地執行了gnome-terminals,而不是並行執行。 – 2013-04-25 09:53:30

+0

我讀到只有第二個命令運行..但不是並行。 – 2013-04-25 09:58:18

+0

這對我來說非常合適。 – 2013-04-25 10:14:12