↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 6.4 已结束支持。 请参阅 当前版本手册.

第 60 章 Postgres 信号

Massimo Dal Zotto

注意

由 Massimo Dal Zotto 贡献

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

表 60.1. Postgres 信号

信号postmaster 动作服务器动作
SIGHUPkill(*,sighup)read_pg_options
SIGINTdiecancel query
SIGQUITkill(*,sigterm)handle_warn
SIGTERMkill(*,sigterm), kill(*,9), diedie
SIGPIPEignoreddie
SIGUSR1kill(*,sigusr1), diequickdie
SIGUSR2kill(*,sigusr2)async notify (SI flush)
SIGCHLDreaperignored (alive test)
SIGTTINignored 
SIGTTOUignored 
SIGCONTdumpstatus 
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

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.