在Ubuntu中,如何从PHP同时执行多个终端?

在Ubuntu中,如何从PHP同时执行多个终端?,ubuntu,php,Ubuntu,Php,我有一个从CLI运行的PHP脚本 在脚本中,我有以下循环: foreach($array as $key => $value){ exec("gnome-terminal -e php myscript.php $key $value > /dev/null"); } 我所期望的是,一个新的终端将弹出,并在不同的终端窗口中同时运行我的脚本和相关参数 能够可视化数据只是为了调试。确认脚本正常工作后,我希望在后台使用以下命令运行脚本: exec("php myscript.

我有一个从CLI运行的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。我怎样才能让它们同时运行以进行调试,然后在没有调试的情况下在后台同时无声地运行?

问题可能是:Web服务器运行的用户与您不同。它不知道X-Server在哪里,X-Server通常不允许来自不同用户的连接。所以你必须做两件事:

从PHP运行gnome终端时,必须确保设置了DISPLAY变量。这应该做到:

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

您必须允许远程连接。您可以在X-Session中运行的终端中使用
xhost+
实现这一点,但这将允许所有连接,因此请小心。

问题可能是:Web服务器运行的用户与您不同。它不知道X-Server在哪里,X-Server通常不允许来自不同用户的连接。所以你必须做两件事:

从PHP运行gnome终端时,必须确保设置了DISPLAY变量。这应该做到:

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

您必须允许远程连接。您可以在X-Session中运行的终端中使用
xhost+
,但这将允许所有连接,因此请小心使用它。

由于您正在运行另一个PHP进程,您是否考虑过使用fork


既然您正在运行另一个PHP进程,您是否考虑过使用fork


既然您正在运行另一个PHP进程,您是否考虑过使用fork?尝试添加
&
以将gnome终端启动到后台。@因此,我对pcntl_fork()不太熟悉。我对php.net文档不是很清楚。你能给出一个如何使用它的例子吗?如果我没记错的话,你可能需要重定向所有的stdio以使它工作。我想试试>/dev/null 2>&1这是一个很好的pcntl_fork()教程,因为您正在运行另一个PHP进程,您考虑过使用fork吗?尝试添加
&
以将gnome终端启动到后台。@因此,我对pcntl_fork()不太熟悉。我对php.net文档不是很清楚。你能给出一个如何使用它的例子吗?如果我没记错的话,你可能需要重定向所有的stdio以使它工作。我想试试>/dev/null 2>&1这是一个关于pcntl_fork()的很好的教程。根据我对他的问题的理解,代码可以很好地执行gnome终端,只是不能并行执行。我读到只有第二个命令运行。。但不是并行的。根据我对他的问题的理解,代码很好地执行gnome终端,只是不是并行的。我读到只有第二个命令运行。。但不是平行的。