注意:由 Massimo Dal Zotto 提供
信号 | 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