witr 实战指南:一条命令追查任何进程、端口和容器的“身世之谜“ 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深夜服务器告警你 ssh 上去敲下ps aux屏幕刷出一排进程node、python、nginx、postgres……每一个都在运行却没有一个告诉你——它们为什么在跑谁启动了它们又被谁守护着传统工具ps、top、lsof只展示有什么在跑把为什么留给你自己去联想。witr 就是来补上这块拼图的。witr 是一个系统进程溯源工具核心使命只有一句话Why is this running?它能把你关心的任意进程、端口、容器或文件一步步追溯回启动它的那条完整链条并以人类可读的文本或交互式 TUI 呈现。无论是排查偶发故障还是理解一台陌生服务器上有什么在跑它都适合你用。此处插入项目截图建议截取 witr 查询 node 进程的标准输出重点展示 Why It Exists: systemd → pm2 → node 这条因果链以及右上角开始时间/重启次数等字段三步上手从零到第一次成功溯源第一步一条命令完成安装Unix 系Linux、macOS、FreeBSD直接跑安装脚本自动识别系统和 CPU 架构把二进制装到/usr/local/bincurl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bashWindows 用户在 PowerShell 里执行对应的安装脚本即可。如果你更习惯包管理器brew install witr、winget install -e --id PranshuParmar.witr、npm install -g pranshuparmar/witr任选其一。第二步跑一次真正的查询先拿一个你一定有的进程开刀——nginx、sshd 或者 node随你挑witr node你会看到一份叙事体报告最关键的几行长这样Target : node Process : node (pid 14233) User : deploy Command : node /srv/expense-manager/index.js Why It Exists : systemd (pid 1) → PM2 v5.3.1: God (pid 5034) → node (pid 14233)没错系统守护进程 systemd → PM2 → node因果链一眼到底。第三步确认安装成功装完顺手验证一下版本和手册是否就位witr --version man witr看到版本号当前为 0.3.3和完整 man 手册就说明安装彻底成功了。也可以什么都不带直接运行witr会直接进入交互式 TUI 界面。核心能力拆解五个高频场景一次讲透按端口查谁在占坑线上服务报端口冲突第一反应是ss -lntp拿到 PID再回头查 PID 是谁。witr 一步到位witr --port 5432它会直接告诉你 postgres 监听着 5432并且给出systemd (pid 1) → postgres (pid 2010)的完整来历连启动它的 systemd 单元文件和 socket 信息都一并带上。树状视图看清家族关系单个链条还不够想看清父子孙全貌--tree会把祖先和子进程画成一棵树witr --pid 40141 --treesystemd (pid 1) └─ sshd (pid 711) └─ sshd (pid 40122) └─ bash (pid 40141) ├─ python3 (pid 8123) └─ ngrok (pid 14290)原来那个可疑的 python3 是从你的 SSH 会话里拉起来的——真相大白。单行输出与 JSON为脚本而生的两个参数监控脚本需要快速判断进程状态--short给出单行因果链干净利落witr --port 5000 --short # systemd (pid 1) → PM2 v5.3.1: God (pid 5034) → node (pid 14233)要对接程序就上--json全结构化输出解析零成本。窥探进程的环境变量怀疑某进程被错误配置坑了--env直接把环境变量摊开给你看witr --pid 14233 --envEnvironment : NODE_ENVproduction PORT5000 DATABASE_URLpostgres://app127.0.0.1:5432/expenses端口配置、数据库地址对不对一屏见分晓。交互式 TUI一张面板掌握全局直接运行witr或加-i参数进入 TUI 模式顶部有四个标签页进程、端口、容器、文件锁实时刷新支持鼠标点击排序、按/搜索。高亮某个进程右侧面板立刻展开它的完整祖先树、子进程、环境变量还能直接对进程发送信号或调整优先级仅 Unix。进阶技巧老手也不一定知道的好用组合一次查多个目标不同维度混着来结果按顺序分隔输出witr nginx --port 5432 --pid 1234模糊匹配太多结果时用--exact。witr ng可能同时命中 nginx 和 ngrok加-x只匹配精确名称彻底告别误伤。给进程做一次安全体检用--warnings只看告警witr python3 --warnings # • Process is listening on a public interface发现你的服务暴露在公网接口上这类隐患一目了然。把退出码接进 CI。witr 返回 0正常、1有告警、2未找到、3权限不足等含义明确的退出码写进监控脚本判断服务健康状态非常顺手。查文件被谁握着。witr --file /var/lib/dpkg/lock能找出正在占用某个文件锁的进程及其启动来源排查 dpkg 卡死这类问题极好用。避坑指南三个高频坑的解法现象一查询结果信息残缺比如看不到工作目录、环境变量。原因witr 需要读取系统目录当前权限不足。解法用 sudo 提权运行如sudo witr --pid 1234。现象二输入进程名后提示 Multiple matching processes。原因默认是子串模糊匹配witr ng会同时命中 nginx 和 ngrok。解法按提示用witr --pid pid精确指定或加--exact关闭模糊匹配。现象三macOS 上某些系统进程详情读不出来Windows 上看不到其他用户的进程。原因macOS 的系统完整性保护SIP天然限制了访问Windows 需要管理员身份。解法macOS 换sudo运行个别进程仍受限属正常Windows 请用管理员 PowerShell 启动。收尾与延伸witr 的价值在于把排查系统问题从多工具来回切换的苦差事压缩成一条命令的即时回答。下一次当你再问出这进程为什么在跑它就是你最快的答案来源。想深入的话可以阅读项目内的 CLI 文档docs/cli/witr.md或直接翻看核心源码cmd/witr/main.go了解命令入口TUI 逻辑在 internal/tui 目录进程采集在 internal/proc 目录都是不错的阅读起点。【免费下载链接】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),仅供参考