exec()在PHP中等待响应

时间:2011-08-17 13:16:33

标签: php linux exec

  

可能重复:
  php exec command (or similar) to not wait for result

我有一个运行一系列exec()命令的页面,它强制我的PHP脚本停止更改,直到收到响应。如何判断exec()不等待响应并运行命令?

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

3 个答案:

答案 0 :(得分:6)

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

例如,在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对象记录在here。这绝对有效,我以前用过......

我上面也进行过编辑,以反映为了让/dev/null与* {n}上的&一起使用,还需要管道exec()

还添加了一些关于WshShell的信息。

答案 1 :(得分:1)

在过去,我对以下构造有好运(windows,但我确定在* nix中有一个等效的命令

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

答案 2 :(得分:0)

在后台运行命令怎么样?

exec('./run &');