首页 > 解决方案 > pcntl_fork 后 PHP 关闭连接

问题描述

我正在尝试使用不同的进程通过 api 获取一些数据以同时执行所有请求。

它工作正常,但脚本中有很多内存泄漏(我使用共享内存段来存储每个进程获取的结果)

我用来创建共享内存段的代码如下所示(我只是放了对理解问题有用的最少代码):

for ($i = 0; $i < 6; $i++)
{
    if (getmypid() == $parent_pid) {
        $process_pool[] = pcntl_fork();
        // Get the memory segment where the process set the status of data fetching and set it to KO
        if (getmypid() == $parent_pid) {
            //I am creating memory here
            echo '<br>i : ' . $i . ' mypid : ' . getmypid() . '<br>';
        }
    }
}

这是我得到的输出:

我:0 mypid:11128

我:1个mypid:11128

我:2 mypid:11128

i:3 mypid:11128

HTTP/1.1 200 OK 主机:127.0.0.1:8000 日期:星期一,2018 年 12 月 10 日 11:07:31 +0000 连接:关闭 X-Powered-By:PHP/7.2.2 内容类型:文本/html;charset=UTF-8 HTTP/1.1 200 OK 主机:127.0.0.1:8000 日期:星期一,2018 年 12 月 10 日 11:07:31 +0000 连接:关闭 X-Powered-By:PHP/7.2.2 内容类型:文本/html; charset=UTF-8
i : 0 mypid : 11128

i:1 mypid:11128

HTTP/1.1 200 OK 主机:127.0.0.1:8000 日期:星期一,2018 年 12 月 10 日 11:07:34 +0000 连接:关闭 X-Powered-By:PHP/7.2.2 内容类型:文本/html;charset=UTF-8
i : 0 mypid : 11128

我:1个mypid:11128

我:2 mypid:11128

我:3 mypid:11128

i:4 mypid:11128
HTTP/1.1 200 OK 主机:127.0.0.1:8000 日期:星期一,2018 年 12 月 10 日 11:07:34 +0000 连接:关闭 X-Powered-By:PHP/7.2.2 内容类型:文本/html;charset=UTF-8
i:0 mypid:11128
HTTP/1.1 200 OK 主机:127.0.0.1:8000 日期:2018 年 12 月 10 日星期一 11:07:34 +0000 连接:关闭 X-Powered-By:PHP/7.2。 2 内容类型:text/html;charset=UTF-8
i : 0 mypid : 11128

我:1个mypid:11128

i:2 mypid:11128
HTTP/1.1 200 OK 主机:127.0.0.1:8000 日期:星期一,2018 年 12 月 10 日 11:07:34 +0000 连接:关闭 X-Powered-By:PHP/7.2.2 内容类型:文本/html;charset=UTF-8
i : 0 mypid : 11128

我:1个mypid:11128

我:2 mypid:11128

我:3 mypid:11128

我:4 mypid:11128

我:5 mypid:11128

很明显,问题来自连接因某种原因被关闭,这是什么,我该如何解决?

谢谢你的帮助!

标签: phpmultiprocessing

解决方案


推荐阅读