witr:一行命令精准追踪进程来源,20K+ Star 的系统运维利器

在日常运维和开发中,我们经常会遇到这样的场景:某个端口被占用了、某个进程在吃资源、某个容器不知从哪冒出来的。用 pslsofss 查半天,还得手动关联各种信息才能搞清楚来龙去脉。有没有一个工具能直接回答「这个进程哪来的?」

今天要介绍的 witr(Why Is This Running) 正是为此而生——它在 GitHub 上已经收获 20,732 颗星,今日增长 210+ stars,以极简的设计解决了运维中最常见的痛点。

witr 是什么?

witr 是一个用 Go 编写的跨平台命令行工具,核心功能就一个:追溯任何进程、端口、容器或文件锁的完整来源链路

它的设计哲学非常清晰——pstopsystemctl 告诉你「什么在运行」,而 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:内部错误

使用场景

  1. 端口冲突排查:部署服务时端口被占用,一行命令找到占用的进程及其来源
  2. 安全审计:检查服务器上的可疑进程,快速定位来源和启动方式
  3. 容器管理:多容器环境中快速定位某个容器的完整信息
  4. 监控集成:通过 JSON 输出 + 退出码嵌入自动化运维脚本
  5. 故障排查:服务器上莫名出现的进程,追溯是哪个 cron 任务或 systemd timer 触发的
  6. 新手友好:内置浏览器沙盒教程(在线体验),无需安装即可上手

总结

witr 打动人的地方在于它的专注简单。它不试图做一个大而全的监控平台,而是把「追溯进程来源」这一件事做到极致。单一二进制、零依赖、速度快、跨平台、输出友好——这正是 Unix 哲学在现代运维工具中的体现。

如果你也经常在服务器上对着 ps aux | greplsof -i 手忙脚乱,witr 绝对值得一试。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享