开源工具 witr:一条命令查清端口占用与进程来源
witr 是一款跨平台开源命令行工具,用一条命令即可追踪端口占用、文件锁、容器与进程的完整启动链路,直接回答“为什么会运行”。支持 JSON 输出和交互式 TUI,兼容 Linux、macOS、Windows 和 FreeBSD。本文介绍其安装方法与典型使用场景。
开发时遇到端口被占用,往往只知道某个进程占着端口,却不知道它为什么在那里。开源工具 witr(Why is this running?)可以一条命令追出进程、端口、容器和文件背后的完整启动链路,直接回答“为什么在运行”。
项目简介
witr 是一个跨平台的开源命令行工具,GitHub 上约 21.7k Star,使用 Apache-2.0 协议,支持 Linux、macOS、Windows 和 FreeBSD。它不满足于告诉你“哪个 PID 在跑”,而是继续向上追踪启动来源,解释这个进程是什么、被谁启动、中间经过了 systemd、PM2、Docker 还是 shell。

功能特性
一条命令,追出完整因果链
假设 8000 端口被占用,以前要先用 lsof、ss 查端口,再查 PID 和父进程,最后猜测是被哪个服务拉起来的。现在直接用:
witr --port 8000
它会列出监听端口的进程、父进程、启动命令、工作目录和所属服务,直接说出“为什么”。

不只查端口,文件和容器也能查
除端口外,文件被谁打开、Docker 容器从哪来、服务重启后为什么又自己回来,都可以交给 witr:
witr node
witr --file /var/lib/dpkg/lock
witr --container nginx
项目还纳入了 Docker、Podman、nerdctl、Kubernetes、Incus、LXC/LXD 和 FreeBSD jail 的容器线索。
交互式 TUI 查看全局
不带参数直接运行 witr,会进入终端界面,把进程、端口、容器、文件锁分成几类展示,点进去可以继续追查。它像一个“会讲故事的 top”,重点不是堆指标,而是帮你找到源头。

输出兼容自动化场景
默认输出可读文本,脚本和 Agent 可以改用 JSON:
witr --port 8000 --json
witr --pid 14233 --short
所以它不只是临时排障工具,也能放进 CI、巡检脚本和事故响应流程。
快速安装与使用
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
也可以使用包管理器:
brew install witr
winget install -e --id PranshuParmar.witr
npm install -g @pranshuparmar/witr

装好后先试试:
witr --version
witr --port 3000
witr --container docker
写在最后
查状态和找原因之间那段最费脑子的工作,witr 帮你接上了。遇到端口冲突、服务异常、容器来源不明时,先别急着 kill -9,问一句:到底是谁把它启动起来的?

项目地址
GitHub: https://github.com/pranshuparmar/witr 官网: https://pranshuparmar.github.io/witr/





暂无评论,期待您的发言...