【问题标题】:Is process forking in PHP / Apache a good idea?PHP / Apache 中的进程分叉是个好主意吗?
【发布时间】:2010-09-23 23:05:07
【问题描述】:

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

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

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

【问题讨论】:

  • 请在问题标题中明确说明您的意思是分叉一个进程。我一开始以为你想分叉这个项目。
  • 同意phjr。有人可以编辑标题吗?

标签: php process fork


【解决方案1】:

父进程将结束,用户页面将完全加载,子进程将继续,使用不会反馈子进程是否成功完成。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我认为这是个坏主意。我做了类似的事情,apache将父级的输出重定向到它的子级。那是您的浏览器显示来自其中一个子进程的信息。
        点击this了解更多信息
        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2010-11-05
          • 2020-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-11
          • 2013-04-01
          • 2010-12-28
          • 2010-10-19
          相关资源
          最近更新 更多