pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
由 Massimo Dal Zotto 贡献
Postgres 使用下列信号在 postmaster 和后端之间通信:
表 60.1. Postgres 信号
| 信号 | postmaster 动作 | 服务器动作 |
|---|---|---|
| SIGHUP | kill(*,sighup) | read_pg_options |
| SIGINT | die | cancel query |
| SIGQUIT | kill(*,sigterm) | handle_warn |
| SIGTERM | kill(*,sigterm), kill(*,9), die | die |
| SIGPIPE | ignored | die |
| SIGUSR1 | kill(*,sigusr1), die | quickdie |
| SIGUSR2 | kill(*,sigusr2) | async notify (SI flush) |
| SIGCHLD | reaper | ignored (alive test) |
| SIGTTIN | ignored | |
| SIGTTOU | ignored | |
| SIGCONT | dumpstatus | |
| SIGFPE | FloatExceptionHandler |
“kill(*,signal)” 表示向所有后端发送一个信号。
与旧信号处理方式相比的主要变化是:用 SIGQUIT 而不是 SIGHUP 来处理 warn,用 SIGHUP 重新读取 pg_options 文件,以及把 发送给 postmaster 的 SIGHUP、SIGTERM、SIGUSR1 和 SIGUSR2 重定向到所有活动后端。 这样,发送给 postmaster 的这些信号就可以自动 发送给所有后端,而无需知道它们的 pid。 要关闭 postgres,只需向 postmaster 发送一个 SIGTERM, 它会自动停止所有后端。
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
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。