一尘不染

exec()等待PHP中的响应

linux

我的页面运行着一系列exec()命令,这些命令迫使我的PHP脚本停止更改,直到收到响应为止。我如何知道exec()不要等待响应而只运行命令?

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


阅读 911

收藏
2020-06-07

共1个答案

一尘不染

取决于您使用的平台和运行的命令。

例如,在Unix / Linux上,您可以> /dev/null &在命令末尾追加命令,以告诉Shell释放您已启动的进程,exec将立即返回。这在Windows上不起作用,但是有一种使用COM对象的替代方法(请参见下面的编辑)。

许多命令都有可以传递的命令行参数,因此它们释放与终端的关联并立即返回。另外,某些命令似乎挂起,因为它们已经提出了一个问题,并且正在等待用户输入以继续执行操作(例如,当运行gzip且目标文件已存在时)。在这些情况下,通常可以传递一个命令行参数来告诉程序如何处理而不提出问题(在gzip示例中,您将传递-f)。

编辑

只要COM可用,以下是在Windows上执行所需操作的代码:

$commandToExec = 'somecommand.exe';
$wshShell = new COM("WScript.Shell");
$wshShell->Run($commandToExec, 0, FALSE);

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

我也在上面进行了编辑,以反映这样的事实:/dev/null为了在* nix上&工作,还需要使用管道exec()

还刚刚添加了有关WshShell的更多信息。

2020-06-07