exec()在PHP中等待响应


exec() waiting for a response in PHP

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