我有一个运行一系列exec()
命令的页面,它强制我的PHP脚本停止更改,直到收到响应。如何判断exec()
不等待响应并运行命令?
我正在使用一个复杂的命令,它有一个我可以查询的后端系统来检查状态,所以我不关心响应。
答案 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 &');