首页/安全/应急响应速查/进程树与父子关系(pstree)

进程树与父子关系(pstree)

从父子关系切入比单看进程更有效:Web 服务叉出 bash、sshd 下面挂着奇怪子进程,往往一眼可见。

应急响应速查安全更新于 2026-10-13

进程树与父子关系

把进程按父子关系画成树,比看扁平列表更容易发现异常:正常的服务进程有清晰的层级,而入侵链条往往表现为「意料之外的一层」——Web 服务进程下面挂着一个交互式 shell,或者办公软件进程下面出现脚本解释器。pstree 与 ps 的树形输出都能完成这件事,配合上溯父进程就能确认某个可疑进程是被谁拉起来的。

基本信息

常用命令pstree -aps(含 PID 与命令行参数)、ps -eo pid,ppid,user,cmd --forest
核心概念PPID 指向父进程,逐级上溯可还原启动链
可疑模式Web 服务子进程出现 bash、sh -c,或被停止进程下挂新进程
确认方式ps -o ppid= -p <PID> 逐级上溯直到 1 号进程或会话首进程
注意父进程退出后 PPID 可能被复用,需结合创建时间判断
权限要求查看其他用户进程的完整命令行需 root

典型使用场景

  • 确认可疑进程是被谁拉起的:服务、计划任务还是人工执行
  • 排查 Web 服务器被植入命令执行入口的迹象
  • 定位守护结构,判断终止顺序,避免杀一个被另一个拉起
  • 核对服务进程数量是否异常(例如多出几个同名字的 shell)
  • 为进程画像补充一层关系证据

查看进程树与可疑父子链

查看进程树与可疑父子链
pstree -aps | head -n 60                                   # 完整树,含参数
ps -eo pid,ppid,user,cmd --forest | head -n 60              # 树形扁平输出
ps -eo pid,ppid,user,cmd --forest | grep -B2 -A2 -iE 'bash|sh -c|wget|curl' | head -n 40
ps -o pid,ppid,lstart,cmd -p 1234                           # 查看该进程自身
P=1234; while [ "$P" != "1" ] && [ -n "$P" ]; do ps -o pid,ppid,user,cmd -p "$P" --no-headers; P=$(ps -o ppid= -p "$P" | tr -d ' '); done   # 逐级上溯

可疑父子链模式

父进程子进程说明
httpd 或 nginxbash 或 shWeb 服务不应直接派生交互式 shell,属高危
Office 或浏览器powershell 或 cmd典型钓鱼文档执行链
计划任务进程下载工具或脚本解释器保活脚本的常见形态
同名的两个进程互为父子watchdog 结构需要一并处理,否则互相拉起
父进程已退出(PPID 为 1)可疑二进制孤儿进程,常见于被守护进程拉起后守护退出
父子链要结合启动时间看:父进程退出后,它的进程号可能被系统复用给别的进程,只凭 PPID 数值判断父子关系容易把无关进程串成一条链。
Web 服务进程的子进程如果是交互式 shell 或下载工具,基本可以直接按高危处理:正常业务请求不会以这种形式派生命令解释器,这通常意味着存在命令执行入口或已落地的脚本后门。

易错点

  • 只看扁平进程列表:父子关系中的异常完全看不到,白错过最强线索
  • 没加 ww 或宽度不足:树形输出被截断,参数与路径看不全
  • 把 PPID 当可靠父进程:进程号会被复用,需结合启动时间判断
  • 忽略守护结构:父子互为看门狗时只处理一个,另一个会立刻拉起
  • 发现高危链条后立即终止:未做进程画像就动手,样本与连接证据同时丢失

数据来源与参考

  • man 1 pstree(psmisc)
  • MITRE ATT&CK T1059 命令与脚本解释器

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌