当前位置:   article > 正文

PostgreSQL 切勿kill -9去杀进程_kill 9杀掉进程

kill 9杀掉进程

熟悉Oracle的人可能会去经常使用kill -9杀进程,因为有的时候使用SQL命令去杀进程,一些进程的状态只是会被置为"killed"状态,其锁定的资源仍然没有释放,可能会收到提示:

ORA-00031: session marked for kill
  • 1

因此甚至还建议大家去使用kill -9直接去操作系统上杀掉进程。

又比如我们Oracle停库的时候常常都是先停监听,再手动kill掉LOCAL=NO的进程,然后再去停库。

但是要注意了,切勿在PostgreSQL中使用kill -9去杀掉进程!

首先我们先 看一个例子:
在这里插入图片描述
这里我们有一个进程号为474的psql进程,如果我们使用kill -9杀掉该进程会发生什么呢?
在这里插入图片描述
我们发现,其它的一些postgresql的后端进程都受到了影响,其进程ID都发生了变化。
通过查看日志,我们发现这些进程确实是被重置了:
在这里插入图片描述
这也是为什么我们不建议使用kill -9去杀掉pg的进程,而在Oracle中却不会这样:

在这里插入图片描述
这是因为Oracle由于pmon进程的存在,在某个进程非正常退出后,会做好妥善的后事及清理工作。PostgreSQL由于没有,假如某个进程正在修改shared buffer里的某个数据块,然后被异常终止了,Postmaster为了安全,就会主动停下其他后台进程,做修复善后工作,重置其状态来接受新的连接。

所以,千万不要在pg中使用kill -9去杀进程,而是使用select pg_terminate_backend()和pg_cancen_backend(),或者是pg_ctl kill SIGNALNAME PID的方式。

参考链接:
https://postgreshelp.com/operating-system-kill-signals-on-postgresql/
https://www.modb.pro/db/44333

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/981943
推荐阅读
相关标签
  

闽ICP备14008679号