↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.5 已于 2004 年 6 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

第 55 章 Postgres 信号

Massimo Dal Zotto

注意

由 Massimo Dal Zotto 贡献

Postgres 使用下列信号在 postmaster 和后端之间通信:

表 55.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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。