在使用了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进程回收的功能