云服务器Linux进程卡死处理流程(优先温柔终止,最后强制杀)

云服务器Linux进程卡死处理流程(优先温柔终止,最后强制杀)

重要提醒:kill -9 是最后的手段,它不给进程保存、刷盘、关闭连接的机会,数据库、Redis、业务写入进程直接 -9 极易丢数据、文件损坏。
云服务器详细介绍:https://act.tag.org.cn
一、第一步:定位卡死进程,拿到PID

 实时看CPU/内存占用,top里按P按CPU排序、M按内存排序
top

 查找进程PID(推荐)
ps aux | grep 进程名
pgrep 进程名
pidof 进程名

 查看进程状态(重点看STAT那一列)
ps -ef | grep PID
ps -o pid,ppid,stat,cmd -p PID

状态说明:

  • S:睡眠,正常
  • R:运行
  • Z:僵尸进程(defunct),kill -9 杀不掉它本身,要杀父进程PPID
  • D:不可中断睡眠(IO卡死,磁盘/NFS挂死),很多时候 kill -9也无效,需要处理底层IO问题

QQ20261023-012857

二、第二步:先优雅终止(SIGTERM 信号15)

kill PID
 等价 kill -15 PID

作用:通知进程自行收尾、保存数据、释放资源后退出,线上优先这个。
等待3~10秒,再用 ps 检查进程是否还在。

三、第三步:强制终止(SIGKILL 信号9,万不得已再用)

 指定PID精准强杀(最推荐,不容易误杀)
kill -9 PID

按进程名批量强制杀(慎用!会杀掉同名全部进程)

 killall:精确匹配进程名
killall -9 进程名

 pkill:模糊匹配,更容易误杀,谨慎
pkill -9 进程关键词

端口占用卡死,直接杀占用端口进程

 查找占用8080端口PID
lsof -i :8080
 直接杀掉该端口所有进程
fuser -k 8080/tcp

四、两种特殊杀不掉的场景
1)Z 僵尸进程(defunct)
僵尸进程本身已经死掉,只是父进程没有回收,给僵尸PID发kill/-9完全无效

 查到僵尸的父进程PPID
ps -o ppid -p 僵尸PID
 重启/杀掉父进程,systemd会自动回收僵尸
kill PPID
 服务类优先用systemctl重启,而不是直接杀父进程
systemctl restart xxx

2)D 不可中断IO进程(磁盘卡死、NFS挂载挂死)
D状态是进程在内核IO等待,内核不会响应SIGKILL,kill -9 看着执行成功,进程还在:
排查命令:

 看磁盘IO
iostat -xz 1
 看内核报错
dmesg -T | tail
 查看进程卡在哪个IO
cat /proc/PID/wchan

处理方案:

  • NFS卡死:umount -l /mnt/nfs 延迟卸载挂载点
  • 磁盘硬件/文件系统故障:备份数据,必要时重启服务器
  • 云盘异常:去云服务商控制台看磁盘状态

五、服务进程优先使用systemctl(比kill规范)

 优雅停止
systemctl stop nginx
 停止卡住,强制杀完再重启
systemctl kill -s KILL nginx
systemctl restart nginx

六、服务器整体卡死、SSH连不上的兜底方案

  1. 云服务商后台 → VNC/控制台登录(不要依赖SSH)
  2. VNC内执行上面命令
  3. VNC也卡:云服务器控制台强制重启实例(最后兜底,业务会中断)

七、信号速查表
| 命令 | 信号 | 说明 |
| kill PID | 15 SIGTERM | 优雅退出,优先使用 |
| kill -9 PID | 9 SIGKILL | 内核强制干掉,无清理,慎用 |
| kill -1 PID | 1 SIGHUP | 重载配置(很多服务支持) |
| kill -2 PID | 2 SIGINT | 等价 Ctrl+C |

实操示例

 1. 找到java卡死进程PID
pgrep java
 返回 12345
 2. 先优雅关闭
kill 12345
sleep 5
 3. 还存在,强制杀
kill -9 12345
posted @ 2026-10-23 01:29  BLOGAME  阅读(19)  评论(0)    收藏  举报