现在离数据库启动过程的高潮只有几步之遥,这几步比较简单,简要描述之。
这几步包括:
八:设置虚拟文件描述符
九:初始化活跃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方法处理。这个后面数据库启动的时候会体现。
初始化信号句柄调用流程图 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|