回收php-fpm在pcntl_fork后的进程

在使用了pcntl_fork后,php-fpm会产生子进程,这些进城不能够被php-fpm服务管理,不能够进行stop start等操作,并且父进程被结束后,这些子进程会成为孤立进程不被控制.
如果pcntl_fork使用多了,name会产生很多php-fpm的子进程,占用内存且不能够被回收

尝试一

修改php-fpm.conf文件的pm模式,默认为dynamic,在此修改为ondemand,并且设置pm.process_idle_timeout=60希望能够尝试解决,但是最后没有成功.

pm = ondemand
pm.process_idle_timeout = 60

尝试二

在子进程结束以后自己结束自己的进程


            pcntl_signal(SIGCHLD, SIG_IGN);
            $pid = pcntl_fork();    //创建子进程
            if ($pid === -1) {
                throw new EventException('创建子进程失败');
            } elseif ($pid) {
                pcntl_wait($status, WNOHANG);
            } else {
                try {
                    ;//数据处理
                } finally {
                    posix_kill(posix_getpid() , SIGTERM);//自杀自己的进程
                    exit(0);
                }
        }

最终实现子进程处理完以后,将自己的进程自杀,实现php-fpm进程回收的功能

猜你喜欢

转载自blog.csdn.net/chenzhuyu/article/details/79288308