2.6.3 设置信号处理和信号屏蔽
Postgres中信号的注册方式和Postmaster类似,因此这里只对Postgres中处理的信号及其意义进行介绍。Postgres中信号和对应的信号处理函数如表2-11所示。
其中几个重要的信号处理函数的意义如下:
SIGHupHandler:当配置文件发生改变时产生此信号。服务进程在收到SIGHUP信号时重读配置文件postgresql.conf,并重新装载pg_hba.conf和pg_ident.conf文件。
StatementCancelHandler:在收到SIGINT信号后调用此函数,终止正在进行的查询操作。若此时进程正在退出则什么也不做(proc_exit_inprogress为真),否则置标志位QueryCancelPending、InterruptPending为真,表明准备处理查询取消中断。如果现在可以中断的话,先阻碍其他中断,调用LockWaitCancel函数判定是否在
表2-11 Postgres信号及其处理函数
等待锁(若是则关闭计时器,将自己从等待队列删除,将进程信号量置0),调用ProcessInterrupts由elog函数退回到在处理查询之前设置的跳跃点位置处理下一个查询。
die:该函数处理SIGTERM信号,用来终止当前的事务。若此时进程正在退出则什么也不做;否则置标志位ProcDiePending为真,表明准备处理进程退出中断,如果现在可以中断的话,先阻碍其他中断,调用LockWaitCancel函数判定是否在等待锁(若是则关闭计时器,将自己从等待队列删除,将进程信号量置0),调用ProcessInterrupts由elog函数退出(进程退出的优先级大于取消查询)。
quickdie:处理SIGQUIT信号。首先屏蔽其他信号,然后结束正在进行的工作并退出。
handle_sig_alarm:该函数处理SIGALRM信号,这是由进程等待锁的时间超时引发的。如果存在死锁,就将自己从锁等待队列中退出,唤醒自己并在PROC结构中将错误类型置为STATUS_ERROR。
【责任编辑:云霞 TEL:(010)68476606】