如何杀死uwsgi进程且避免worker进程自动重新生成
uWSGI进程终止后自动重启的彻底解决方法
问题根因
杀进程后自动重启的核心原因90%以上是uWSGI服务被systemd/supervisor这类进程监控工具托管了,手动杀掉uWSGI进程后,监控工具检测到进程退出会自动触发重启逻辑。
分步解决步骤
第一步:排查是否被进程管理工具托管
检查systemd托管
执行命令查看是否有uWSGI相关的systemd服务:
sudo systemctl list-units --type=service | grep -i uwsgi
如果有匹配的服务项,直接通过systemd停止服务即可:
# 停止运行中的服务 sudo systemctl stop <你的uwsgi服务名> # 如需彻底禁止开机自启+禁止自动重启,执行以下命令 sudo systemctl disable <你的uwsgi服务名>
检查supervisor托管
执行命令查看supervisor托管的服务列表:
sudo supervisorctl status
如果列表中有你的uWSGI项目,通过supervisor停止:
# 停止指定项目 sudo supervisorctl stop <你的uWSGI项目名> # 如需永久关闭自动重启,编辑对应supervisor配置文件(一般存放在/etc/supervisor/conf.d/目录下),将autorestart参数设为false,之后重载配置生效 sudo supervisorctl update
第二步:无托管场景下的彻底清退方法
如果确认没有进程管理工具托管,说明是master进程未正常退出导致worker被自动拉起,按以下顺序执行命令即可:
- 先正常发送停止信号给master进程:
uwsgi --stop /tmp/MyProject.pid
- 等待3秒后检查是否还有残留进程:
ps aux | grep uwsgi | grep -v grep
- 如果还有残留,先终止所有worker进程,再杀master:
sudo pkill -f uwsgi -s SIGTERM sleep 2 kill -SIGTERM `cat /tmp/MyProject.pid`
- 仍有残留的话执行强制清理:
sudo pkill -9 -f uwsgi
补充说明
你的配置中已经开启了die-on-term = true,正常发送SIGTERM信号就可以完全停止uWSGI所有进程,常规操作下不需要用-9强制杀进程,避免出现pid文件残留、socket文件未清理的问题。
内容的提问来源于stack exchange,提问作者Jo Jay
相关产品推荐
相关产品推荐

