witr 进程溯源完全指南:一条命令看穿进程为何在运行

发布时间:2026/9/6 22:26:46
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系统里突然冒出一个占着 8000 端口的陌生进程ps、lsof、systemctl只能告诉你什么在跑却说不出谁把它拉起来的。witr 是一个单文件二进制的进程溯源工具CLI TUI把进程、端口、容器、文件统一映射成 PID再沿父进程链一路回溯直接回答为什么这个进程在运行。排查线上故障的运维、调试本地环境的开发都是它的目标用户。安装与验证两条命令跑通 安装按你手里的发行版选一条即可# LinuxDebian / Ubuntu 26.04 sudo apt install witr# Windows winget install -e --id PranshuParmar.witrmacOS 上把 apt 换成brew install witr其他渠道conda、npm、scoop、AUR 等包名都是witr按需选择。想要最新代码也可以克隆 witr 仓库 后go build ./cmd/witr。验证只有一条witr --version能打印出版本号就说明装好了。顺带一提所有 flag 都支持 Tab 补全执行witr completion bash或 zsh / fish / powershell写入对应 rc 文件即可。快速上手第一个为什么装完直接敲一个进程名witr node输出大致长这样Target : node Process : node (pid 14233) User : pm2 Command : node index.js Started : 2 days ago Why It Exists : systemd (pid 1) → pm2 (pid 5034) → node (pid 14233) Source : pm2 Working Dir : /opt/apps/expense-manager Git Repo : expense-manager (main) Sockets : 127.0.0.1:5001 (TCP | LISTENING)注意 Why It Exists 这一行——systemd → pm2 → node因果链一步到位。这就是 witr 和传统工具最大的区别ps给你状态witr 给你来历。命中多个进程时会返回编号列表提示你用--pid二选一。按名称、PID、端口、文件四种方式定位四种查询入口各有对应参数全部支持重复传值、混用你要做什么用哪个参数会看到什么按名字找进程witr nginx默认子串匹配fuzzy返回进程信息 因果链 来源只要名字完全一致的witr nginx --exact只返回精确同名进程避免ngrok混进来已知 PIDwitr --pid 1234该 PID 的完整溯源报告排查 EADDRINUSEwitr --port 5432占用端口的进程及其祖先链若端口由 systemd socket 激活或容器运行时持有会回退定位到真正的属主锁文件 / 打开文件witr --file /var/lib/dpkg/lock哪个进程持有这个文件按容器名找witr --container redis跨 Docker / Podman / nerdctl / k8s / LXC 等运行时匹配名称、镜像、compose 标签加--verbose还能看到挂载与网络多目标一次查完也合法witr nginx --port 5432 --pid 1234结果按输入顺序、用----- [name: nginx] -----这类分隔行切开互不干扰。进阶玩法TUI 看板与输出整形交互式 TUI不想敲参数时直接裸跑witr等价于witr -i进入实时看板四个页签分别是 Processes / Ports / Containers / Locks进程列表可排序、可筛选侧栏实时展示高亮进程的完整祖先树选中进程后可以直接发信号Kill / Terminate / Pause / Resume或调整优先级Unix 平台支持鼠标点行、点列排序颜色随终端深浅色主题自动适配列表按自适应节奏自动刷新无需手动刷新。按场景挑参数只要因果链别的都不看→--short。witr --port 5000 --short输出就一行systemd (pid 1) → PM2 (pid 1481580) → python (pid 1482060)贴到事故报告里刚刚好。要看目标进程连同它的子进程→--tree。输出成一棵缩进树目标进程高亮子进程最多展示 10 个。怀疑是环境变量把行为搞怪的→--env。witr --pid 1234 --env列出该进程的全部环境变量。把结果喂给脚本或监控→--json机器可读配合退出码使用见下。信息再多给点→--verbose容器场景下会附带挂载、网络、compose 元数据。退出码给 CI 留的钩子退出码含义0正常找到进程且无告警1找到进程但存在告警如 root 运行、监听公网地址2未找到匹配项3权限不足4参数非法或匹配歧义5内部错误写巡检脚本时case $? in分支一下比 grep 输出可靠得多。权限要求与平台差异对照平台权限要点主要限制Linuxx86_64 / arm64涉及系统目录时建议sudo witr无基于/proc全功能macOSx86_64 / arm64部分操作需sudoSIP 之下个别系统进程的环境变量和细节即使 sudo 也拿不到Windowsx86_64 / arm64看其他用户 / 系统服务必须以管理员身份开终端无文件锁页签TUI 不支持发信号无计划任务检测FreeBSDx86_64 / arm64同 Linux无计划任务timer检测四个平台的进程/端口/文件定位、容器查询、Git 仓库识别、告警检测都是齐的差异集中在上表列出的几处。故障排查速查表⚡ 遇到意外输出时先对号入座现象原因解法预期信息缺失、只有一半权限不够读系统目录或其他用户的进程换sudo witrWindows 用管理员终端重跑提示未找到进程退出码 2名字/PID 写错或进程已退出先用ps确认去掉--exact让子串匹配兜底名称查询返回编号列表子串同时命中多个进程从列表挑 PID 用--pid复查或加--exact容器查不到对应运行时 CLIdocker、podman 等不在 PATH把运行时 CLI 装好再查FreeBSD 需jls把为什么压缩成 10 秒witr 的价值不在于替代ps或lsof而在于省掉你在五六个工具之间人肉关联输出的那几分钟——端口被占、服务被杀、锁文件打架一条命令把因果链摆出来。更多 flag 细节见 官方 CLI 参考想零安装体验一遍完整排障流程可以打开 浏览器版演练场 在模拟机器上练手。【免费下载链接】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),仅供参考