重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛
标题: linux kill PG 后端进程 与 pg_ctl kill 对应关系 [打印本页]
作者: mahan 时间: 2026-3-15 20:34
标题: linux kill PG 后端进程 与 pg_ctl kill 对应关系
在 PostgreSQL 里,pg_ctl kill 其实只是一个 信号发送工具,本质上就是帮你向 PostgreSQL 进程发送 Linux signal。
kill -15 对应的就是 SIGTERM。
而 pg_ctl kill 用的是 信号名称简写。
一、kill -15 对应的 pg_ctl 命令
Linux:
kill -15 <pid>
等价于:
pg_ctl kill TERM <pid>
也就是:
SIGTERM
二、pg_ctl kill 支持的常见信号
pg_ctl kill SIGNAL pid
例如:
Linux pg_ctl 信号 PostgreSQL 含义
kill -2 pg_ctl kill INT SIGINT cancel query
kill -15 pg_ctl kill TERM SIGTERM 优雅终止
kill -1 pg_ctl kill HUP SIGHUP reload config
kill -9 pg_ctl kill KILL SIGKILL 强制杀进程
kill -3 pg_ctl kill QUIT SIGQUIT fast shutdown
示例:
pg_ctl kill TERM 2000
等价:
kill -15 2000
三、不同信号对 PostgreSQL backend 的影响
1 SIGINT(取消 SQL)
kill -2 <pid>
等价:
pg_ctl kill INT <pid>
效果:
只取消当前 SQL
连接保持
对应 SQL:
SELECT pg_cancel_backend(pid);
2 SIGTERM(优雅终止)
kill -15 <pid>
等价:
pg_ctl kill TERM <pid>
效果:
回滚事务
释放锁
关闭连接
对应 SQL:
SELECT pg_terminate_backend(pid);
3 SIGQUIT(立即退出)
kill -3 <pid>
等价:
pg_ctl kill QUIT <pid>
效果:
快速退出
不做完整 cleanup
这个信号通常用于:
fast shutdown
4 SIGKILL(强制杀死)
kill -9 <pid>
等价:
pg_ctl kill KILL <pid>
效果:
不可捕获
直接杀死
不建议使用
四、PostgreSQL 官方推荐方式
优先顺序:
SQL 方式
SELECT pg_cancel_backend(pid);
SELECT pg_terminate_backend(pid);
OS 信号
kill -15 pid
最后手段
kill -9 pid
五、一个小知识(很多人不知道)
pg_ctl kill 不要求 PostgreSQL 正在运行。
它只是一个:
signal sender
例如:
pg_ctl kill HUP 1234
其实就是:
kill -1 1234
所以很多 DBA 其实直接用:
kill -15
六、总结