加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL启动过程中的那些事十二:为postmaster进程设置信号句

发布时间:2020-12-13 17:45:27 所属栏目:百科 来源:网络整理
导读:现在离数据库启动过程的高潮只有几步之遥,这几步比较简单,简要描述之。 这几步包括: 八:设置虚拟文件描述符 九:初始化活跃backend进程列表 十:创建opts文件 十一:保存非默认GUC参数到文件 十二:为postmaster进程安装信号句柄 十三:为统计进程启动准
现在离数据库启动过程的高潮只有几步之遥,这几步比较简单,简要描述之。

这几步包括:

八:设置虚拟文件描述符

九:初始化活跃backend进程列表

十:创建opts文件

十一:保存非默认GUC参数到文件

十二:为postmaster进程安装信号句柄

十三:为统计进程启动准备资源

十四:为autovuc进程启动做条件检查

十五:加载客户端认证配置文件

再接着调用pqinitmask方法和pqsignal方法,为postmaster进程安装信号句柄

pqinitmask();

PG_SETMASK(&BlockSig);

pqsignal(SIGHUP,SIGHUP_handler); /* reread config file and have
* children do same */
pqsignal(SIGINT,pmdie); /* send SIGTERM and shut down */
pqsignal(SIGQUIT,pmdie); /* send SIGQUIT and die */
pqsignal(SIGTERM,pmdie); /* wait for children and shut down */
pqsignal(SIGALRM,SIG_IGN); /* ignored */
pqsignal(SIGPIPE,SIG_IGN); /* ignored */
pqsignal(SIGUSR1,sigusr1_handler); /* message from child process */
pqsignal(SIGUSR2,dummy_handler); /* unused,reserve for children */
pqsignal(SIGCHLD,reaper); /* handle child termination */
pqsignal(SIGTTIN,SIG_IGN); /* ignored */
pqsignal(SIGTTOU,SIG_IGN); /* ignored */
/* ignore SIGXFSZ,so that ulimit violations work like disk full */
#ifdef SIGXFSZ
pqsignal(SIGXFSZ,SIG_IGN); /* ignored */
#endif

其中pqsignal(SIGCHLD,reaper);是如果发生SINGCHLD信号,就reaper方法处理。这个后面数据库启动的时候会体现。


初始化信号句柄调用流程图

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读