这篇文章记录我在 Kali Linux 上练习一次“进程溯源”的完整流程:
从发现高占用进程开始,通过 ps 锁定身份、用 readlink 定位真实可执行文件、再用 pstree 追溯祖宗链,最后判断这个进程是否正常。

目标:建立一套应急排查闭环模板,遇到可疑进程时不慌。


1. 为什么要学进程溯源?

在 Linux 应急或排障里,常见情况是:

  • 机器突然卡顿 / CPU 占用高(怀疑挖矿)

  • 出现陌生进程名(怀疑后门)

  • 发现异常外联(怀疑反弹 shell)

  • 服务异常退出(怀疑被替换)

这时候 只会 top 或 ps aux 远远不够。
关键是要能回答三个问题:

  1. 这个进程到底是什么?(真实可执行文件在哪?)

  2. 它是谁启动的?(父进程/祖宗链是什么?)

  3. 它有没有异常行为?(外联、监听、写入可疑目录)


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 → 再追祖宗链 → 再判正常/异常

这样不会靠猜,也不会查半天查错对象。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐