执行PostgreSQL停止命令后仍有相关进程运行的问题咨询
执行PostgreSQL停止命令后仍有相关进程运行的问题咨询
看起来你碰到了个有点绕的问题:明明执行了系统级的PostgreSQL停止命令,结果查进程的时候还是能看到一堆postgres相关的进程在跑。我来帮你捋捋原因和解决办法。
先看你贴的进程信息,这些运行的postgres进程全属于lxd用户,这是个关键线索!这说明这些进程根本不是你用/etc/init.d/postgresql管理的那个系统级PostgreSQL实例,很大概率是运行在LXD容器里面的PostgreSQL服务——系统的停止脚本管不到容器内部的进程。
排查与解决步骤:
第一步:确认进程归属容器
你可以查看主postgres进程(PID 3433)的cgroup信息,验证它是不是属于LXD容器:cat /proc/3433/cgroup如果输出里有
lxc相关的路径,就实锤是容器内的进程了。第二步:停止容器内的PostgreSQL
- 先列出所有LXD容器,找到运行Postgres的那个:
lxc list - 进入目标容器的shell环境:
lxc exec <你的容器名称> bash - 在容器内部执行PostgreSQL停止命令,比如用systemctl:
要是容器里用的是老版本系统,也可以用对应init脚本,比如sudo systemctl stop postgresqlsudo /etc/init.d/postgresql stop。
- 先列出所有LXD容器,找到运行Postgres的那个:
第三步:处理残留孤儿进程(谨慎操作)
如果确认这些进程是无主的残留进程(比如容器已经销毁但进程没被清理),可以尝试手动终止:- 先优雅终止主进程,让子进程自动退出:
sudo kill 3433 - 等几秒再用
ps -ef | grep post检查,要是还存在,再强制终止(注意:强制终止可能导致数据损坏,只在确认无重要数据时用):sudo kill -9 3433
- 先优雅终止主进程,让子进程自动退出:
小提醒
以后碰到这类情况,先看进程的所属用户和cgroup信息,分清是系统级服务还是容器内服务,就不会搞错停止对象啦。
备注:内容来源于stack exchange,提问作者user352290
相关产品推荐
相关产品推荐

