您的位置:首页 > 编程语言 > PHP开发

回收php-fpm在pcntl_fork后的进程

2018-02-08 12:27 417 查看
在使用了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进程回收的功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: