在日常运维和开发中,我们经常会遇到这样的场景:某个端口被占用了、某个进程在吃资源、某个容器不知从哪冒出来的。用 ps、lsof、ss 查半天,还得手动关联各种信息才能搞清楚来龙去脉。有没有一个工具能直接回答「这个进程哪来的?」?
今天要介绍的 witr(Why Is This Running) 正是为此而生——它在 GitHub 上已经收获 20,732 颗星,今日增长 210+ stars,以极简的设计解决了运维中最常见的痛点。
witr 是什么?
witr 是一个用 Go 编写的跨平台命令行工具,核心功能就一个:追溯任何进程、端口、容器或文件锁的完整来源链路。
它的设计哲学非常清晰——ps、top、systemctl 告诉你「什么在运行」,而 witr 告诉你「为什么它在运行」。
项目地址:github.com/pranshuparmar/witr
核心功能
1. 进程来源追踪
给定一个进程名或 PID,witr 会构建完整的「因果链路」——从 systemd/launchd 一路追踪到目标进程,清楚展示每一层父进程是谁启动的:
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)
2. 端口归属查询
想知道 5432 端口是谁在监听?一条命令搞定:
witr --port 5432
witr 会自动找到占用该端口的进程,并追溯到它的完整启动链路。
3. 容器追踪
支持跨多种容器运行时(Docker、Podman、nerdctl、K8s/crictl、Incus、LXC/LXD、FreeBSD jails)统一查询:
witr --container redis
会显示容器名、镜像、状态、端口映射、挂载卷、所属 Compose 项目等完整信息。
4. 文件锁查询
哪个进程锁住了文件?
witr --file /var/lib/dpkg/lock
5. 交互式 TUI
不带参数运行 witr 即可进入交互式终端界面,提供四个标签页:
- 进程标签页:实时排序、筛选、查看进程树
- 端口标签页:所有监听端口及其所属进程
- 容器标签页:跨运行时统一展示所有容器
- 文件锁标签页:系统级文件锁一览
TUI 还支持鼠标操作、自适应主题(自动匹配终端明暗模式)、自动刷新(默认 3 秒间隔,高负载时智能退避)。
技术特色
多平台支持
witr 提供单一静态二进制文件,支持 Linux、macOS、FreeBSD 和 Windows:
- Linux:完整 /proc 文件系统支持
- macOS:使用 ps、lsof、sysctl、pgrep
- Windows:原生 Win32 API(ToolHelp32)
- FreeBSD:procstat + libprocstat 集成
丰富的安装方式
de># Homebrew (macOS/Linux)
brew install witr
# APT (Debian/Ubuntu)
sudo apt install witr
# Winget (Windows)
winget install -e –id PranshuParmar.witr
# Conda
conda install -c conda-forge witr
# Arch Linux AUR
yay -S witr-bin
# Scoop (Windows)
scoop install main/witr
# Go 直接安装
go install github.com/pranshuparmar/witr/cmd/witr@latest
此外还支持 MacPorts、Chocolatey、FreeBSD Ports、GNU Guix、NPM、Nix 等。
智能输出模式
witr 提供多种输出格式:
- 标准模式:人类友好的叙事式输出
--short:仅显示来源链路--tree:树状图展示完整进程关系(含子进程)--json:机器可读格式,适合脚本集成--env:显示进程环境变量--verbose:完整细节(挂载卷、网络配置等)--warnings:仅显示警告信息
安全审计功能
witr 会自动检测并提示安全隐患:
- 进程以 root 运行
- 非 root 进程持有危险 Linux capabilities(CAP_SYS_ADMIN 等)
- 监听在公网接口(0.0.0.0 / ::)
- 高频重启(超过阈值时告警)
- 高内存占用(>1GB RSS)
- 长时间运行(>90 天)
- 已删除的二进制文件、库注入迹象(LD_PRELOAD)
有意义的退出码
适合集成到 CI 脚本和监控系统:
0:正常,未发现警告1:有警告2:未找到匹配进程3:权限不足4:输入无效5:内部错误
使用场景
- 端口冲突排查:部署服务时端口被占用,一行命令找到占用的进程及其来源
- 安全审计:检查服务器上的可疑进程,快速定位来源和启动方式
- 容器管理:多容器环境中快速定位某个容器的完整信息
- 监控集成:通过 JSON 输出 + 退出码嵌入自动化运维脚本
- 故障排查:服务器上莫名出现的进程,追溯是哪个 cron 任务或 systemd timer 触发的
- 新手友好:内置浏览器沙盒教程(在线体验),无需安装即可上手
总结
witr 打动人的地方在于它的专注和简单。它不试图做一个大而全的监控平台,而是把「追溯进程来源」这一件事做到极致。单一二进制、零依赖、速度快、跨平台、输出友好——这正是 Unix 哲学在现代运维工具中的体现。
如果你也经常在服务器上对着 ps aux | grep 和 lsof -i 手忙脚乱,witr 绝对值得一试。
















cqlbgzs@163.com 1年前0
d好879445037@qq.com 2年前0
购买了 无法下载Alexcc 3年前0
强大Alexcc 3年前0
看不了教程Alexcc 3年前0
雷刺下载Alexcc 3年前0
下载Alexcc 3年前0
下载dsa456159 3年前0
下载