PHP / Apache中的进程分叉是个好主意吗?

时间:2008-11-25 13:51:45

标签: php process fork

我正在用PHP编写一个简单的应用程序,它需要偶尔执行一组相当密集的MySQL更新。我并不特别希望这会给用户造成延迟,所以我想知道如何使用pcntl_fork()。

我不确定这是如何工作的:子进程在父进程完成后是否继续运行?在子进程完成之前,父进程是否会结束,用户的页面加载是否完全完成?

换句话说,这是一种安全的方式让PHP脚本(在Apache下运行)做一些耗时的更新而不会拖延用户,或者我应该让我的用户忍受一些延迟?

3 个答案:

答案 0 :(得分:3)

父进程将结束,用户的页面将完全加载,子进程将继续,并且使用将无法反馈子进程是否成功完成。

答案 1 :(得分:1)

有人可能会详细告诉你当你在apache下调用它时会发生什么但是你可能会得到的答案并非总是如此,这取决于你使用的apache和php的版本和组合。你应该使用ajax并有两个请求。使用显示您正在执行的操作的页面响应一次,然后使用ajax调用轮询第二次请求状态以及您实际执行工作的位置。

答案 2 :(得分:0)

如果PHP在Apache下运行,因为mod_php模块forking根本不起作用,你会收到警告,说函数* pcntl_fork()*是未定义的。在这种情况下,一个好的解决方案是使用 exec()来代替使用命令行运行单独的php作业。