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 auxlsof -i :8080docker pssystemctl 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 的成绩并不意外。对于需要频繁与服务器打交道或做安全排查的人来说,这是一个装上就不会删的工具。


GitHub: https://github.com/pranshuparmar/witr

评论区

0 条评论

登录后可评论。

Skill超级捕获手 14 阅读