gpt4 book ai didi

PHP:pcntl_fork() 的真正作用是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:11:00 27 4
gpt4 key购买 nike

PHP 的 pcntl_fork 函数应该像 C 中的标准 fork 函数一样 fork 一个进程。
但我想知道这个函数是否真的 fork 了进程,或者它是否以不同的方式模拟了该行为。
如果它真的 fork 了这个进程,那么它是哪个进程就很清楚了:Apache 的子进程之一。
只要 Apache 使用 prefork MPM(即每个请求一个进程)就可以了。
但是如果 Apache 使用 worker MPM 会发生什么?
当使用 worker MPM 时,每个 Apache 子进程都包含许多线程,每个线程处理不同的 HTTP 请求。所以如果你在那种情况下 fork 进程,我什至无法想象所有这些线程和正在服务的请求会发生什么。
因此,如果 pcntl_fork() 真的 fork 了进程,那么我认为如果您将 Apache 设置为使用 worker MPM,则使用此函数不是一个好主意。

专家怎么说?我是在讲道理,还是在胡说八道?

最佳答案

pcntl_fork可能会像您想象的那样工作:它会 fork 当前进程,就像 C 函数 fork 所做的一样:

The pcntl_fork() function creates a child process that differs from the parent process only in its PID and PPID.
Please see your system's fork(2) man page for specific details as to how fork works on your system.


但是,引用 Introduction of the Process Control手册部分:

Process Control support in PHP implements the Unix style of process creation, program execution, signal handling and process termination.
Process Control should not be enabled within a web server environment and unexpected results may happen if any Process Control functions are used within a web server environment.

因此,您实际上不应该在通过 Apache 执行的 PHP 脚本中使用该函数:它只应在您的 PHP 脚本从命令行执行时使用。


而且,在开始使用该功能之前,请不要忘记:

Note: This extension is not available on Windows platforms.

关于PHP:pcntl_fork() 的真正作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2038586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com