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

发布时间:2026/9/6 19:01:07
3分钟上手 witr:一条命令讲清进程为什么在运行 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 witrWindows 上等价的做法是 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 5432witr 先把端口解析到 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),仅供参考