第六十五章. Postgres 信号

注意:Massimo Dal Zotto 提供
Postgres 使用下面的信号用于在 postmaster 和 后端之间通讯:
表 65-1. Postgres 信号

信号 postmaster 动作 服务器动作
SIGHUP kill(*,sighup) read_pg_options
SIGINT 退出 取消查询
SIGQUIT kill(*,sigterm) handle_warn
SIGTERM kill(*,sigterm), kill(*,9), 退出 退出
SIGPIPE 忽略 退出
SIGUSR1 kill(*,sigusr1), 退出 迅速退出
SIGUSR2 kill(*,sigusr2) 异步通知 (SI 输出)
SIGCHLD reaper 忽略 (存活测试)
SIGTTIN 忽略  
SIGTTOU 忽略  
SIGCONT 输出状态 (dumpstatus)  
SIGFPE   FloatExceptionHandler
注意:“kill(*,signal)” 表示向所有后端发送信号.
与原先的信号控制相比,主要的改变是用 SIGQUIT 代替 SIGHUP 来操作警告,SIGHUP 来重新读取 pg_options 文件以及对发送给 postmaster 的 SIGHUP,SIGTERM,SIGUSR1 和 SIGUSR2 信号对所有活跃后端的重新定向.用这种方法,发送给 postmaster 的这些信号可以自动发送给所有这些后端而不需要知道他们的进程号(pid).要停止 postgres 的运行,我们只需要发送一个 SIGTERM 信号给 postmaster,然后它就会自动停止所有后端的运行.

SIGUSR2 信号还用于防止在某些后端长期不处理 SI 缓存造成的 SI 缓存表的溢出.当一个后端发现 SI 表到达70%的使用度,它只是向 postmaster 发送一个信号,该信号将唤醒所有空闲的后端并且令它们冲刷缓存.

程序员对信号的典型用法是:

# stop postgres
kill -TERM $postmaster_pid
# kill all the backends
kill -QUIT $postmaster_pid
# kill only the postmaster
kill -INT $postmaster_pid
# change pg_options
cat new_pg_options > $DATA_DIR/pg_options
kill -HUP $postmaster_pid
# change pg_options only for a backend
cat new_pg_options > $DATA_DIR/pg_options
kill -HUP $backend_pid
cat old_pg_options > $DATA_DIR/pg_options