我使用exec()运行了一个后台PHP程序,如下所示:
exec('/usr/bin/php bgScript.php "arg1" "arg2" > /dev/null 2>&1 &');它可以工作,程序在后台运行。
问题
我已经启用了输出缓冲,并希望保持这种状态。
我的剧本是这样的:
exec('/usr/bin/php bgScript.php "arg1" "arg2" > /dev/null 2>&1 &');
echo json_encode(array(
"status" => "started"
));当向上面的文件发出AJAX请求时,进程将启动并处于后台。我假设这是因为,对服务器的进一步请求将返回数据,并且不会为前面的AJAX脚本完成wait。
但是,问题是,在后台进程完成之前,不会输出JSON数据。
由于程序是在后台运行的,所以不应该在不等待exec()结束的情况下输出JSON数据吗?我不知道如何在技术上这样说(请原谅我):为什么输出缓冲区会一直持续到exec()结束?
在程序在后台启动并关闭AJAX脚本和浏览器之间的连接之后,如何使脚本输出JSON数据?
发布于 2016-05-01 15:55:42
如果stdio未被重定向,则该命令不会在后台运行。从正式文件
注意:如果一个程序是用这个函数启动的,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一个输出流。如果不这样做,将导致PHP挂起,直到程序执行结束。
在类似于Unix的系统中,有几种方法可以使用command >/dev/null &在windows上运行命令,您可以使用start command。
https://stackoverflow.com/questions/36968552
复制相似问题