如何在PHP中运行后台进程并获取返回值

时间:2012-10-30 14:51:25

标签: php bash sh

  

可能重复:
  Make PHP wait for Matlab script to finish executing

好的,从php execute a background process开始 运行后台进程效果很好。问题是,我也需要回归那个过程。对我来说显而易见的解决方案是:

$cmd = "($cmd > $outputfile 2>&1 || echo $? > $returnfile) & echo $! > $pidfile";
exec($cmd);

当我在命令行上运行生成的命令时,它会按预期填充背景和文件。问题是当php exec()运行时,命令不会进入后台(至少,exec不会返回直到命令完成)。我试过nohup的变种并等待$ pid,但仍然没有解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这很棘手 - 您可以将流程分叉以执行其他操作,从而保留原始流程。

http://php.net/manual/en/function.pcntl-fork.php

但是,如果这是一个Web应用程序,则没有内置方法可以将返回代码或STDOUT检索回父进程,因为它在技术上是异步的(您的请求 - 响应周期可能会在生成结果之前结束) 。

您可以将返回代码和/或STDOUT存储到文件中以便稍后检查。