2013-04-25 89 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