可能重复:
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 &');