witr:追查任意进程来源的跨平台追踪利器
witr:追查任意进程来源的跨平台追踪利器
功能与原则
witr(Why Is This Running?)用一句话回答一个每个工程师都头疼过的问题:这东西到底是怎么跑起来的? 它能追踪任意进程、端口、容器或文件,将因果链完整还原——不需要在 ps、lsof、ss、systemctl、docker ps 之间手动关联,直接一条命令说清楚。输出支持人类可读的树状结构、机器可解析的 JSON,以及交互式 TUI 仪表盘。
认可度
- GitHub star:20,296(截至 2026-08-09)
- 今日新增:556 stars(当日 GitHub Trending 高居前列)
- Fork:683
- 平台支持:Linux、macOS、FreeBSD、Windows 全平台
- 包管理器:Homebrew、APT、Conda、Arch AUR、Winget、NPM、Chocolatey、Scoop 等 20+ 种安装方式
- Product Hunt:Featured 产品
链接
GitHub:https://github.com/pranshuparmar/witr
原作者
pranshuparmar(GitHub username: pranshuparmar)— 独立开发者,专注系统工具与开发者效率赛道。
介绍
当你面对一台陌生的服务器,满眼都是跑着的进程,却不知道它们各自从哪来、谁启动了谁时,传统的排查方式是打开多个标签页,分别跑 ps aux、lsof -i :8080、docker ps、systemctl list-units,然后靠大脑把信息串起来——这个过程既慢又容易出错。
witr 把这件事自动化了。它内置了进程→父进程→Supervisor→容器→Systemd→Shell→SSH/User 的完整因果链解析能力,输入任意进程 ID、端口、容器名或文件名,直接还原出完整的启动链路。输出形式可以是:
– 人类可读的树状图:一目了然看到父子关系
– JSON 格式:方便接入其他工具或脚本
– 交互式 TUI:实时浏览、搜索、展开
项目还有一个在线沙箱(https://pranshuparmar.github.io/witr/),可以在不安装的情况下体验完整教程。
特点
- 单命令还原因果链:进程→父进程→Supervisor→容器→Systemd→登录会话,一键追踪到底
- 跨平台覆盖:Linux、macOS、FreeBSD、Windows 均有官方二进制或包管理器支持
- 多输出格式:TUI(交互式)/ 树状文本 / JSON,灵活适配不同使用场景
- 多安装方式:20+ 种包管理器,curl 一键脚本、Homebrew、APT、NPM 等应有尽有
- Shell 自动补全:Bash、Zsh、Fish 原生支持,安装即启用
- 在线沙箱:有预置的模拟 Linux 环境,无需安装即可体验教程
- 零运行时依赖:静态编译二进制,下载即用,无外部依赖
使用方法
一键安装(Linux/macOS/FreeBSD):
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash
Windows PowerShell:
irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex
Homebrew:
brew install witr
NPM(跨平台):
npm install -g @pranshuparmar/witr
基本用法:
# 追踪一个进程
witr -p <PID>
# 追踪占用某端口的进程链
witr -l :8080
# 追踪容器
witr -c my-container
# 进入交互式 TUI 模式
witr
# JSON 输出(供脚本使用)
witr -p <PID> -o json
使用场景与人群
- DevOps / SRE:快速定位陌生服务器上异常进程的来源,判断是 Systemd 服务、容器还是手动启动
- 后端工程师:调试端口冲突、排查进程僵尸问题
- 安全工程师:追踪可疑进程的父级来源,判断是否为未授权启动
- 技术支持:远程排查客户环境时,不需要对方装一堆工具,一条命令拿到完整链路
- 学生/初学者:理解 Linux 进程层级和系统启动链路
输入与输出案例
案例 1:追踪一个 Redis 进程
输入:witr -p $(pgrep redis-server)
输出:
redis-server (PID 3821)
└── systemd (PID 1)
└── /sbin/init
→ 清楚看到 Redis 由 Systemd 托管,Systemd 是 PID 1。
案例 2:追踪占用 8080 端口的进程链
输入:witr -l :8080
输出:
node (PID 15123) [监听 :8080]
└── bash (PID 15120)
└── sshd (PID 312)
└── systemd (PID 1)
→ 快速定位是哪个 SSH 会话里启动了 Node 服务,而非系统服务。
witr 把”进程为什么在跑”这个模糊问题变成了一个可验证、可复现的命令行查询,在 GitHub Trending 上拿到 556 当日新增 star 的成绩并不意外。对于需要频繁与服务器打交道或做安全排查的人来说,这是一个装上就不会删的工具。
评论区
登录后可评论。