学习中心/工程实践/Linux/Linux 8:进程挂了,按顺序查
· Linux · 8 · 进程
Linux 8:进程挂了,按顺序查
ps、ss、/proc、journalctl。TERM 在 KILL 前面。有 unit 就 systemctl。

挂了先看,再决定动不动手
服务没反应,顺序是:谁在跑、谁占端口、日志说什么、再发信号。这一块走完,你该有方法,而不是一上来 kill -9。
- 进程ps / top
- 端口ss / lsof
- 日志journalctl
- 信号TERM → KILL
1. 谁在跑
- 看按名字找。最后一行常是 grep 自己
ps aux | grep nginx - 看只列出匹配的 pid 和命令行
pgrep -a nginx - 看父子关系。杀父进程,子进程往往一起走
pstree -p | head
PID 是这一次的编号,重启会变。PPID 是父进程。僵尸进程(Z)已经死了,卡在等父亲收尸,kill 它没有用。
2. 谁在吃机器
- 看load average 三个数:1、5、15 分钟。大约相对 CPU 核数来看
uptime - 看CPU、内存。Shift+P 按 CPU 排,Shift+M 按内存。q 退出
top
load 高不一定是 CPU。iowait 高是盘在拖。top 里 wa 一栏。htop 更可读,没有就用 top。
3. /proc 不是普通目录
- 看这个进程打开了哪些文件和套接字。PID 换成你看到的
ls /proc/$(pgrep -n nginx)/fd - 看真实命令行,含被改掉的 argv
tr '\0' ' ' < /proc/$(pgrep -n nginx)/cmdline; echo
/proc 是内核把状态暴露成文件。不是磁盘上的文件夹,不要当资料盘来清。
4. 谁占了端口
- 看正在听的 TCP,以及进程。没有进程名就加 sudo
ss -lntp - 看谁占着 80。ss 没有时用这个
sudo lsof -iTCP:80 -sTCP:LISTEN
端口在听、页面打不开:进程在,问题在防火墙、反代或应用自己。先记下 pid 和侦听地址是 127.0.0.1 还是 0.0.0.0。
5. 信号
- 停请它自己收尾。默认的 kill 就是 TERM
kill -TERM PID - 停很多守护进程会重读配置。nginx -s reload 往往更合适
kill -HUP PID - 停立即结束,来不及收尾。先试 TERM。有 systemd 的用 systemctl stop
kill -KILL PID
KILL(-9)内核直接收走,文件可能半写。能 TERM 就 TERM。kill 杀的是一个 pid,pkill 按名字,范围更大,先 pgrep 看会命中谁。
6. 日志
- 看这个服务最近 100 行
journalctl -u nginx -n 100 --no-pager - 看这次开机以来的错误
journalctl -u nginx -p err -b --no-pager - 看有文件日志就看文件。-f 是跟上
tail -n 50 /var/log/nginx/error.log
7. 方法
- 没响应:ps / pgrep → ss 端口 → journalctl 或日志文件 → 再决定 stop 还是 kill。
- CPU 打满:top 找出进程,看它是在算还是在等锁。
- 机器慢:uptime 看 load,top 看 wa,df 看盘(排查那一篇)。
- 有 unit 的服务,优先 systemctl,不要手工杀再留下一个 systemd 去重启它。
这块过关:挂了你有顺序,TERM 在 KILL 前面。下一篇用钥匙登录远程。