我正在用PHP编写一个简单的应用程序,它需要偶尔执行一组相当密集的MySQL更新。我并不特别希望这会给用户造成延迟,所以我想知道如何使用pcntl_fork()。
我不确定这是如何工作的:子进程在父进程完成后是否继续运行?在子进程完成之前,父进程是否会结束,用户的页面加载是否完全完成?
换句话说,这是一种安全的方式让PHP脚本(在Apache下运行)做一些耗时的更新而不会拖延用户,或者我应该让我的用户忍受一些延迟?
答案 0 :(得分:3)
父进程将结束,用户的页面将完全加载,子进程将继续,并且使用将无法反馈子进程是否成功完成。
答案 1 :(得分:1)
有人可能会详细告诉你当你在apache下调用它时会发生什么但是你可能会得到的答案并非总是如此,这取决于你使用的apache和php的版本和组合。你应该使用ajax并有两个请求。使用显示您正在执行的操作的页面响应一次,然后使用ajax调用轮询第二次请求状态以及您实际执行工作的位置。
答案 2 :(得分:0)
如果PHP在Apache下运行,因为mod_php模块forking根本不起作用,你会收到警告,说函数* pcntl_fork()*是未定义的。在这种情况下,一个好的解决方案是使用 exec()来代替使用命令行运行单独的php作业。