六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 138|回复: 0

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

[复制链接]

升级  53.67%

117

主题

117

主题

117

主题

举人

Rank: 3Rank: 3

积分
361
 楼主| 发表于 2013-1-30 01:25:00 | 显示全部楼层 |阅读模式
 
    现在离数据库启动过程的高潮只有几步之遥,这几步比较简单,简要描述之。

    这几步包括:

       八:设置虚拟文件描述符

       九:初始化活跃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方法处理。这个后面数据库启动的时候会体现。



 

初始化信号句柄调用流程图
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表