exec()等待PHP中的响应

可能重复:
PHP执行命令(或类似)不等待结果

我有一个运行一系列exec()命令的页面,强制我的PHP脚本停止更改,直到收到响应。 我怎么能告诉exec()不等待一个响应,只是运行命令?

我正在使用一个复杂的命令,后端系统可以查询状态,所以我不关心响应。

取决于你使用的平台,以及你正在运行的命令。

例如,在Unix / Linux上,你可以追加> /dev/null &到命令的最后,告诉shell释放已经启动的进程,exec将立即返回。 这在Windows上不起作用,但是有一种使用COM对象的替代方法(请参阅下面的编辑)。

许多命令都有一个可以传递的命令行参数,以便它们释放与终端的关联并立即返回。 此外,有些命令会挂起,因为他们提出了一个问题,并等待用户输入,告诉他们继续(例如,当运行gzip并且目标文件已经存在时)。 在这些情况下,通常有一个命令行参数可以传递给程序如何处理这个问题,而不是问这个问题(在gzip例子中,你会传递-f )。

编辑

只要COM可用,下面是在Windows上执行所需操作的代码:

 $commandToExec = 'somecommand.exe'; $wshShell = new COM("WScript.Shell"); $wshShell->Run($commandToExec, 0, FALSE); 

请注意,它是第三个FALSE参数,告诉WshShell启动程序,然后立即返回(第二个0参数被定义为“窗口样式”,在这里可能没有意义 – 您可以传递任何整数值)。 这里记录了 WshShell对象。 这绝对有效,我以前用过…

我也在上面进行了编辑,以反映为了在* nix上使用exec()需要管道到/dev/null的事实。

也只是添加了一些关于WshShell的更多信息。

在过去,我有像下面这样的结构(窗口,但我相信有一个等效的命令* nix

 pclose(popen('START /B some_command','r')); 

怎么在后台运行命令?

 exec('./run &');