好的,从php execute a background process开始 运行后台进程效果很好。问题是,我也需要回归那个过程。对我来说显而易见的解决方案是:
$cmd = "($cmd > $outputfile 2>&1 || echo $? > $returnfile) & echo $! > $pidfile";
exec($cmd);
当我在命令行上运行生成的命令时,它会按预期填充背景和文件。问题是当php exec()运行时,命令不会进入后台(至少,exec不会返回直到命令完成)。我试过nohup的变种并等待$ pid,但仍然没有解决方案。
有什么想法吗?
答案 0 :(得分:0)
这很棘手 - 您可以将流程分叉以执行其他操作,从而保留原始流程。
http://php.net/manual/en/function.pcntl-fork.php
但是,如果这是一个Web应用程序,则没有内置方法可以将返回代码或STDOUT检索回父进程,因为它在技术上是异步的(您的请求 - 响应周期可能会在生成结果之前结束) 。
您可以将返回代码和/或STDOUT存储到文件中以便稍后检查。