为什么这个进程在运行:用 witr 追踪进程因果链的完整指南
【免费下载链接】witrWhy is this running? Trace any process, port, container, or file back to what started it - CLI + TUI.项目地址: https://gitcode.com/GitHub_Trending/wi/witr
某个端口被占用、某个来路不明的进程在跑,你真正想要的往往不是"它是什么",而是"它为什么在跑"——是哪个服务、哪条 cron、还是某人的 SSH 会话拉起来的。witr 就是一个回答这个问题的进程因果链追踪工具:一条命令,把 ps、lsof、systemctl 需要各自回答的部分串成一条完整因果链。
一条端口占用,要敲多少条命令
先看两个真实场景。
场景一:服务起不来,日志里一句address already in use。传统流程是lsof查端口对应的 PID,再ps看命令行长什么样,然后还要手动猜——它是 systemd 拉起的?pm2 托管的?还是谁在终端里手动挂后台的?
场景二:安全巡检时发现一个 root 进程,监听 0.0.0.0。ps告诉你它在跑,systemctl说没有对应单元。剩下的部分——它到底是被谁、从哪一层拉起来的——只能靠经验拼。
问题在于:ps、lsof、systemctl每个工具只回答自己那一层的问题,"为什么"这一环要靠人脑把三份输出对齐。信息是割裂的,排查时间花在对齐上,而不是下结论上。
解法:把入口统一成"这个 PID 从哪来"
witr 的做法是把所有查询入口——进程名、PID、端口、被打开的文件、容器名——先归一成一个 PID,然后沿父进程链向上走,构建出类似这样的因果链:
systemd (pid 1) → pm2 (pid 5034) → node (pid 14233)链的末端它会给出一个"Source"判断:是谁负责启动或维持这个进程。支持的范围包括 systemd 单元(含 timer 定时触发信息)、launchd、cron、pm2、SSH 会话(会标出远程来源 IP)、docker 容器、交互式 shell(含 tmux/screen 会话)、Snap/Flatpak 沙箱。
同时附带三类上下文,省掉你再去敲命令的功夫:工作目录与 Git 仓库及分支、容器名与镜像、端口是本地还是公网监听。另有一组只读警告:root 运行、监听公网接口、内存超 1GB、LD_PRELOAD类注入痕迹等。整个过程不写任何东西,不影响正在运行的进程。
证据:witr 和传统工具差在哪
| 能力 | witr | ps | lsof | systemctl |
|---|---|---|---|---|
| 进程因果链(谁启动的谁) | ✅ | ❌ | ❌ | ❌ |
| 端口 → 进程 → 启动来源 | ✅ | ❌ | ⚠️ 到进程为止 | ❌ |
| 启动源检测(systemd/cron/pm2/SSH/容器) | ✅ | ❌ | ❌ | ✅ 仅 systemd |
| 工作目录 / Git / 容器上下文 | ✅ | ⚠️ 部分 | ⚠️ 部分 | ❌ |
| Linux/macOS/Windows/FreeBSD 输出一致 | ✅ | ⚠️ | ⚠️ | ⚠️ |
公允地说,ps和lsof依然是底层的基石工具,witr 补的是把它们串起来的那一公里,不是替代它们。
落地:两条命令就能用
安装是单个静态二进制,Linux/macOS/Windows/FreeBSD 各平台都有包管理器渠道,装完即可用,无配置。
witr --port 8080—— 输出会直接给出systemd → … → 目标进程的链条,并标注 Source 和监听地址是公网还是本地。适合"端口被占"的第一反应。witr node --tree—— 输出从 init 开始的完整祖先树,并附目标进程的子进程,一眼看清整个进程家族。
脚本化场景有两个实用点:--json输出机器可读结果,退出码区分"干净(0)/有警告(1)/没找到(2)",可以直接接进巡检脚本。
完整参数与输出格式见 docs/cli/witr.md。
谁适合用,什么时候该切换
适合的人:经常处理端口冲突、进程溯源、容器混布环境巡检的后端开发和运维。适合切过来的时机:当你发现自己在一分钟里连续敲了ps+lsof+systemctl三条命令时。传统工具不需要清出工具链,witr 只接管"为什么"这一类问题。
下次再遇到address already in use,可以先试一条witr --port <端口>再决定下一步。
【免费下载链接】witrWhy is this running? Trace any process, port, container, or file back to what started it - CLI + TUI.项目地址: https://gitcode.com/GitHub_Trending/wi/witr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考