Linux 应急排查入门:从 PID 到祖宗链(ps + readlink + pstree 实战)
这篇文章记录我在 Kali Linux 上练习一次“进程溯源”的完整流程:
从发现高占用进程开始,通过ps锁定身份、用readlink定位真实可执行文件、再用pstree追溯祖宗链,最后判断这个进程是否正常。目标:建立一套应急排查闭环模板,遇到可疑进程时不慌。
1. 为什么要学进程溯源?
在 Linux 应急或排障里,常见情况是:
-
机器突然卡顿 / CPU 占用高(怀疑挖矿)
-
出现陌生进程名(怀疑后门)
-
发现异常外联(怀疑反弹 shell)
-
服务异常退出(怀疑被替换)
这时候 只会 top 或 ps aux 远远不够。
关键是要能回答三个问题:
-
这个进程到底是什么?(真实可执行文件在哪?)
-
它是谁启动的?(父进程/祖宗链是什么?)
-
它有没有异常行为?(外联、监听、写入可疑目录)
2. 第一步:从资源占用筛选可疑进程
先按 CPU 排序找占用高的进程:
ps aux --sort=-%cpu | head -15
如果 CPU 都很低,可以按内存排:
ps aux --sort=-%mem | head -15
这一步的核心是:先从系统里选一个真实存在的 PID,不要凭空编 PID。
3. 第二步:锁定进程身份(PID / PPID / CMD)
假设我们选中一个占用较高的进程 PID(我这次选到的是 999),用下面命令看它的关键字段:
ps -p 999 -o pid,user,ppid,cmd --forest
解释一下三个核心字段:
-
PID:进程编号(进程的“身份证号”)
-
PPID:父进程编号(“是谁启动了它”)
-
CMD:启动命令行(它到底执行了什么,带了哪些参数)
-
--forest:用树状结构显示父子关系,读起来更直观
我的输出里,PID 999 的命令行类似:
/usr/lib/Xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 ...
这已经提示:它可能是桌面环境的 Xorg。
4. 第三步:确认真实二进制路径(readlink)
进程的命令行可能被伪装,所以还要看它真正对应的可执行文件是什么:
readlink -f /proc/999/exe
输出为:
/usr/lib/Xorg/Xorg
这说明:PID 999 对应的真实程序就是 /usr/lib/Xorg/Xorg。
应急判断小经验
-
正常系统程序一般在:
/bin/usr/bin/usr/sbin -
危险路径常见在:
/tmp/dev/shm/var/tmp~/.cache -
如果显示
(deleted),说明文件被删了但进程还在跑,高度可疑(常见于恶意程序)
5. 第四步:追祖宗链(pstree -s -p)
最关键的一步:确认这个进程到底是谁启动的,能否追到系统服务或交互会话。
pstree -s -p 999
输出为:
systemd(1)───lightdm(987)───Xorg(999)───{Xorg}(1006)
读法就是:
-
systemd(1):系统 1 号进程(万物起源) -
lightdm(987):图形登录管理器 -
Xorg(999):显示服务器(桌面环境核心组件) -
{Xorg}(1006):Xorg 的线程(花括号代表 thread)
这条链条非常合理,所以可以判断:
✅ PID 999 属于正常桌面图形系统进程。
6. 我踩过的一个小坑:pstree 报错 No such user name: PID
第一次我输入的时候写成了:
pstree -s -p PID
结果报错:
No such user name: PID
原因是:pstree 会把 PID 当成用户名处理。
正确做法是:把 PID 换成真实数字:
pstree -s -p 999
7. 最终结论:这次案例的判断逻辑
当我看到一个 root 权限、资源占用较高的进程时,我用以下逻辑判断:
✅ ps 看身份(PID/PPID/CMD)
✅ readlink 查真实可执行文件路径(排除伪装)
✅ pstree 看祖宗链(判断来源是否正常)
结果显示:这是 systemd → lightdm → Xorg 的正常桌面链条,因此不是恶意进程。
8. 进程溯源闭环模板(以后遇到可疑进程直接套用)
# 1) 先找可疑 PID(按 CPU 或内存) ps aux --sort=-%cpu | head -15 ps aux --sort=-%mem | head -15 # 2) 锁定进程身份(关键四件套) ps -p PID -o pid,user,ppid,cmd --forest # 3) 查真实可执行文件路径 readlink -f /proc/PID/exe # 4) 追祖宗链:看它到底是谁启动的 pstree -s -p PID
9. 附:常见“危险祖宗链”长什么样?(经验提示)
如果你在 pstree 里看到这些链条,就要警觉:
-
sshd → bash → ...(远程登录后启动可疑程序) -
cron → sh → curl → sh(计划任务拉取脚本) -
systemd → 可疑服务 → /tmp/...(systemd 持久化) -
... → python -c/bash -c(单行执行恶意代码)
配合再查网络连接/监听端口,就能快速定位风险。
✅ 总结
这次练习让我真正把“进程溯源”跑通了一次完整闭环。
以后遇到可疑进程时,我会坚持:
先锁定 PID → 再查 exe → 再追祖宗链 → 再判正常/异常
这样不会靠猜,也不会查半天查错对象。
更多推荐


所有评论(0)