可能重复:
php exec命令(或类似命令(不等待结果
我有一个页面,它运行一系列exec()
命令,强制我的PHP脚本停止修改,直到它收到响应。如何告诉exec()
不要等待响应,只运行命令?
我使用的是一个复杂的命令,它有一个后端系统,我可以查询它来检查状态,所以我不关心响应。
取决于您使用的平台和运行的命令。
例如,在Unix/Linux上,您可以将> /dev/null &
附加到命令的末尾,告诉shell释放您启动的进程,exec将立即返回。这在Windows上不起作用,但有一种使用COM对象的替代方法(请参阅下面的编辑(。
许多命令都有一个可以传递的命令行参数,这样它们就可以释放与终端的关联并立即返回。此外,一些命令将显示为挂起,因为它们已经询问了一个问题,并且正在等待用户输入以告诉它们继续(例如,当运行gzip
并且目标文件已经存在时(。在这些情况下,通常可以传递一个命令行参数,告诉程序如何处理此问题,而不询问问题(在gzip
示例中,您将传递-f
(。
编辑
以下是在Windows上执行您想要的操作的代码,只要COM
可用:
$commandToExec = 'somecommand.exe';
$wshShell = new COM("WScript.Shell");
$wshShell->Run($commandToExec, 0, FALSE);
请注意,它是第三个FALSE
参数,告诉WshShell启动程序,然后立即返回(第二个0
参数被定义为"窗口样式",在这里可能没有意义-您可以传递任何整数值(。WshShell对象在此处进行了说明。这绝对有效,我以前用过。。。
我还编辑了上面的内容,以反映这样一个事实,即为了让&
在*nix上与exec()
一起工作,还需要管道连接到/dev/null
。
还添加了更多关于WshShell的信息。
在过去,我很幸运地使用了以下结构(windows,但我相信*nix 中有一个等效的命令
pclose(popen('START /B some_command','r'));
在后台运行命令怎么样?
exec('./run &');