exec()在PHP中等待响应

Web*_*net 5 php linux exec

可能重复:
php exec命令(或类似)不等待结果

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

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

Dav*_*dom 7

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

例如,在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);
Run Code Online (Sandbox Code Playgroud)

请注意,它是第三个FALSE参数,告诉WshShell启动程序然后立即返回(第二个0参数定义为'窗口样式',这里可能没有意义 - 你可以传递任何整数值).WshShell对象在此处记录.这绝对有效,我以前用过......

我还在上面进行了编辑,以反映/dev/null为了在*nix上&工作也需要管道exec().

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