我正在用 PHP 编写一个简单的应用程序,它偶尔需要执行一组相当密集的 MySQL 更新。我不特别希望这给用户造成延迟,所以我想知道使用 pcntl_fork()。
我不确定这到底是如何工作的:父进程完成后子进程会继续运行吗?父进程会结束,用户的页面加载会在子进程完成之前完全完成吗?
换句话说,这是让 PHP 脚本(在 Apache 下运行)在不延迟用户的情况下进行一些耗时的更新的安全方法,还是我应该让我的用户忍受一些延迟?
父进程将结束,用户页面将完全加载,子进程将继续,使用不会反馈子进程是否成功完成。
那里的人可能会详细告诉您,当您在 apache 下调用它时会发生什么,但您可能会得到并不总是正确的答案,具体取决于您使用的 apache 和 php 的版本和组合。您应该使用 ajax 并有两个请求。使用说明您正在做什么的页面响应一次,然后使用 ajax 调用轮询第二个状态请求以及您实际执行工作的位置。
我认为这是个坏主意。我做了类似的事情,apache将父级的输出重定向到它的子级。那是您的浏览器显示来自其中一个子进程的信息。
单击此获取更多信息
希望对您有所帮助。
如果 PHP 在 Apache 下运行,因为 mod_php 模块分叉根本不起作用,您将收到一条警告,指出函数 *pcntl_fork()* 未定义。在这种情况下,一个好的解决方案是使用exec()代替使用命令行运行单独的 php 作业。