在PHP / Apache中进行进程复制是一个好主意吗?

7
我正在使用PHP编写一个简单的应用程序,需要偶尔执行一组相当密集的MySQL更新。我不希望这会给用户造成延迟,所以我想使用pcntl_fork()。但我不确定它究竟是如何工作的:子进程是否会在父进程结束后继续运行?父进程会结束,用户的页面加载会完全完成,然后子进程才会完成吗?换句话说,这是一种安全的方式让PHP脚本(在Apache下运行)执行一些耗时的更新而不延迟用户,还是应该要求用户忍受一些延迟?

请在问题标题中明确表示您要分叉一个进程。我最初以为您想要分叉项目。 - Paweł Hajdan
同意phjr的看法。有人可以编辑一下标题吗? - OIS
4个回答

3
父进程将结束,用户页面将完全加载,子进程将继续运行,而用户将无法得知子进程是否成功完成。

1

可能有人可以详细告诉你在 Apache 下调用时会发生什么,但很有可能你会得到不同的答案,这取决于你使用的 Apache 和 PHP 版本及其组合。你应该使用 AJAX 并进行两个请求。首先回复一个页面,说明你正在做什么,然后通过 AJAX 调用轮询第二个请求以获取状态和实际执行工作的位置。


0
如果PHP在Apache下作为mod_php模块运行,那么forking将完全无法工作,您会收到一个警告,提示函数*pcntl_fork()*未定义。在这种情况下,一个好的解决方案是使用exec()来代替,使用命令行运行一个单独的php任务。

0

我认为这是个不好的想法。我曾经做过类似的事情,而且Apache会将父进程的输出重定向到其子进程中。这意味着您的浏览器将显示其中一个子进程的信息。
点击this以获取更多信息
希望能对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接