先看守护关系再动手
顽固进程背后通常有守护者:杀掉主进程会被立刻重新拉起。更关键的是,进程终止后 /proc 中的命令行、可执行文件与工作目录信息立即消失,因此终止前必须先快照。
推荐顺序
快照 → 判断守护关系 → 处理守护方 → 终止主进程 → 复验是否回归。涉及业务进程时必须先确认影响面,避免为了清理木马把生产服务一起停掉。
基本信息
| 查看 | /proc/<pid>/status、cmdline、exe、cwd |
|---|---|
| 关系 | pstree -p <pid> 查看进程树与父子关系 |
| 顺序 | 先处理看门狗与父进程,再终止目标进程 |
| 记录 | 终止前保存 /proc/<pid> 快照与完整命令行 |
| 复验 | 终止后持续观察是否被重新拉起 |
| 权限要求 | 终止其他用户的进程需 root |
典型使用场景
- 处置挖矿进程与常驻木马
- 结束顽固的扫描或外连程序
- 处理残留会话与守护脚本
- 在终止前留存进程级证据
- 复验清理是否彻底
快照后终止
快照后终止
pstree -p 12345 | head -n 40
tr '\0' ' ' < /proc/12345/cmdline; echo
readlink /proc/12345/exe /proc/12345/cwd
cp -a /proc/12345/exe /evidence/proc_12345_exe 2>/dev/null
kill -TERM 12345; sleep 3; ps -p 12345 -o pid,stat,cmd
ss -antp | grep 12345 | head逐项读法
| 来源 | 含义 | 正常/异常 |
|---|---|---|
| /proc/PID/status | 进程状态与父子 PID | PPid 指向的守护者才是要一并处理的对象 |
| /proc/PID/cmdline | 启动命令行 | 空值常见于内核线程,需与进程名对照 |
| /proc/PID/exe | 可执行文件链接 | 指向 /tmp 等路径即为异常 |
| /proc/PID/cwd | 工作目录 | 指向临时目录通常说明运行环境异常 |
kill -9 之后 /proc 中的记录立即消失:先快照命令行、可执行路径与工作目录,再终止进程,否则证据无法挽回。
先 SIGTERM 再 SIGKILL:给进程清理与落盘的机会,也能从它是否体面退出判断是否存在信号处理逻辑(这本身是可疑特征)。
快照要保存什么
- 完整命令行参数与启动用户
- 可执行文件副本与哈希
- 工作目录与打开的 socket 列表
- 父子进程关系与启动时间
终止后的复验要点
- 观察是否有同名进程重新出现
- 检查父进程是否为守护脚本或系统服务
- 检查计划任务与 systemd 单元是否触发重启
- 确认被占用的端口不再重新监听