3分钟上手 witr:一条命令讲清进程为什么在运行
2026/9/6 19:01:01 网站建设 项目流程

3分钟上手 witr:一条命令讲清进程为什么在运行

【免费下载链接】witrWhy is this running? Trace any process, port, container, or file back to what started it - CLI + TUI.项目地址: https://gitcode.com/GitHub_Trending/wi/witr

服务器上有个陌生进程,你 kill 掉它,重启后它又自己回来了。它到底是谁拉起来的?靠 ps、lsof、systemctl 一个个对线索,查一次要半天。witr 就是冲着这个问题做的:给它一个进程名、PID、端口或文件,它直接回答"这个进程为什么在运行",并给出完整的启动链。

🔧 装起来:两条命令落地

witr 以单个静态二进制分发,Linux、macOS、Windows、FreeBSD 都支持,不带 Go 工具链也能装,没有依赖要处理。

有 Homebrew(macOS 或 Linux)的话,一条命令最省事:

brew install witr

Windows 上等价的做法是 winget,装完重开一个终端即可:

winget install -e --id Pranshuparmar.witr

装完跑一条命令验证:

witr --version

能打印出版本号,说明二进制和 PATH 都没问题。另外,不带任何参数直接敲witr会进入交互式 TUI,这是它的主界面,后面细说。

🎯 核心场景

看进程从哪来

机器上跑着一个 node,你不确定它是谁拉起来的、会不会自己复活。敲:

witr node

输出重点看两段。Why It Exists 给因果链,比如systemd (pid 1) → pm2 (pid 5034) → node (pid 14233),从 1 号进程一路数到你眼前这个;Source 只挑一个主要责任方,是 systemd 单元、launchd 服务、cron 定时任务、docker 容器还是 pm2,一眼定位。末尾还附工作目录、Git 仓库名、监听地址,判断"它为什么还活着"基本够用。名字默认子串匹配,命中多个进程时它会列出候选,提示你用--pid <pid>再查。

端口被谁占了

确认 5432 上是谁在监听、它从哪来。敲:

witr --port 5432

witr 先把端口解析到 PID,再输出和查进程一样的因果链。有个实用细节:如果端口挂在 PID 1 上——systemd socket 激活或容器运行时托管——它会继续下钻到容器层,帮你落到具体容器,而不是让你对着 PID 1 发呆。

交互式 TUI:盯着整机看

不想一个个查,想盯着整机实时看。敲:

witr -i

四个页签各管一块:Processes 是实时可排序的进程列表,侧栏显示选中进程的祖先树;Ports 列监听端口及占用进程;Containers 跨 Docker、Podman、nerdctl、K8s 等运行时给容器列表;Locks 看系统文件锁。支持鼠标点行、点列头排序,选中进程可以直接发信号(终止、暂停、恢复)或调优先级,该操作仅限 Unix 平台。列表自适应刷新,高负载时自动降频。

⚡ 进阶玩法

  • 一行因果链:加--short,输出只剩systemd → pm2 → node这种单行链条,最适合塞进脚本和监控。
  • 树状视图:--tree把祖先和子进程(最多 10 个)画成树,目标进程会被高亮。
  • 机器可读:--json输出结构化结果,方便管道给 jq 或其他工具。
  • 看环境变量:--env直接打印目标进程的环境变量。
  • 精确匹配:-x--exact关掉子串搜索,witr ng这种模糊查询不会再误中 ngrok。
  • 反查文件和容器:--file /var/lib/dpkg/lock看谁占着这个文件;--container redis按名称、镜像或 compose 项目搜容器。
  • 一次查多个:--pid--port--file--container都可重复,还能和名字参数混着写,结果按输入顺序分段输出。
  • 只要异常点:--warnings只输出可疑项,比如进程以 root 运行、监听 0.0.0.0、内存超 1GB、二进制已被删除。

参数全集(含所有短写)在仓库的 docs/cli/witr.md 里,等价于 man 页。

⚠️ 避坑速查

  • 信息比预期少→ Linux/FreeBSD 上加 sudo 再跑,它要读 /proc 和服务管理目录,普通权限可能看不到。
  • macOS 有天花板→ SIP(系统完整性保护)下,部分系统进程细节即使 sudo 也拿不到,这是系统限制,不是 witr 的问题。
  • Windows 要管理员终端→ 看其他用户或系统服务的进程,必须以管理员身份开 PowerShell。
  • 子串误命中witr ng会同时匹配 nginx 和 ngrok,选不出来就换--exact,或改用--pid精确定位。
  • 脚本判断结果→ 退出码 2 表示没找到、3 表示权限不足,写监控时直接判$?即可。

想深挖"它是怎么分辨 cron 还是 systemd"这类检测逻辑,可以看 internal/source/ 下的源码。

下一步

装好之后,先敲witr进 TUI 把四个页签点一遍,再挑一个真实进程跑一次--tree——"谁拉起来的"这个问题,一条命令就交代清楚了。

【免费下载链接】witrWhy is this running? Trace any process, port, container, or file back to what started it - CLI + TUI.项目地址: https://gitcode.com/GitHub_Trending/wi/witr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询