nohup进程PID持续变更,无法终止进程
解决EC2实例中nohup进程无法终止的问题
我之前在EC2上也碰到过一模一样的情况!大概率是你没定位到真正的目标进程,或者这个进程被后台的守护机制自动重启了,给你几个亲测有效的解决步骤:
精准定位进程,别被表面PID骗了
有时候你查到的PID可能只是nohup本身的进程,或者是父进程,真正在跑的业务进程是它的子进程。试试用更精准的命令查找:- 根据进程关键词查找:
ps aux | grep <你的进程关键词>(比如你用nohup启动的是nohup node server.js &,就搜server.js) - 如果进程占用了端口,用端口定位:
netstat -tulpn | grep <端口号>,这个能直接显示对应进程的PID和命令
- 根据进程关键词查找:
尝试不同的终止方式
找到正确的PID后,先试试优雅终止:kill <PID>,如果进程没反应,再用强制终止(注意:强制终止可能会丢失未保存的数据,谨慎使用):kill -9 <PID>
如果进程是root用户启动的,记得加sudo:sudo kill -9 <PID>排查是否有自动重启机制
要是你刚kill完PID又变了,那肯定是有监控脚本或者服务管理工具在自动重启它,比如systemd、supervisor这类:- 检查systemd服务:
systemctl list-units | grep <进程名>,如果找到对应的服务,用systemctl stop <服务名>来彻底停止 - 检查是否有自定义的重启脚本:可以看看crontab或者后台运行的监控脚本
- 检查systemd服务:
用命令名批量终止(懒人技巧)
不想手动找PID的话,直接用进程的命令关键词批量终止:pkill -f <进程关键词>,比如pkill -f server.js,这个命令会匹配所有包含该关键词的进程并终止
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

