witr 对比 ps / lsof / systemctl:一条命令快速完成进程溯源

发布时间:2026/11/9 7:24:07
witr 对比 ps / lsof / systemctl:一条命令快速完成进程溯源 witr 对比 ps / lsof / systemctl一条命令快速完成进程溯源【免费下载链接】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生产机的 3000 端口被占新服务起不来。ps aux | grep node只能给你一行进程记录却说不清这个 node 是谁拉起来的——这类它为什么在运行的问题正是进程溯源要回答的。开源工具 witr 把进程因果链作为核心输出本文对比 ps、lsof、systemctl帮你在几分钟内判断什么场景下值得引入它。三个老工具各自卡在哪ps 看快照PID、CPU、内存、启动时间列进程是它的本职。但快照里没有这条链是怎么来的父进程 ID 只是给你一个需要继续追查的线索。lsof 看文件描述符端口被谁占用、哪些文件被持有查得细。它同样不关心进程从哪来。systemctl 看单元unit 状态、启用状态、最近日志systemd 体系内很可靠。非 systemd 拉起的进程、容器内进程、用户态守护进程它查不到。三个工具各管一段谁把它启动的这一环都落在缝隙里靠人工拼接。 witr 补上了哪块拼图witr 的核心逻辑是无论输入是端口、文件名还是容器名先解析成 PID再沿祖先链向上回溯。上一节缺的那一环它直接用一条链给出systemd (pid 1) → PM2 v5.3.1: God (pid 5034) → node (pid 14233)第二块拼图是查询入口。除进程名外--pid、--port、--file、--container四个 flag 都可重复、可混用。端口排查不需要先知道 PID进程溯源可以直接从端口开始。第三块是环境上下文工作目录、Git 仓库和分支、容器归属、监听地址、运行用户、启动时间与重启次数启动源识别覆盖 systemd含 timer 触发细节、launchd、Windows 服务、rc.d、PM2、cron、SSH 会话、tmux/screen。链的顶端不再需要自己猜。实现细节见 internal/proc/。能力边界对照表下表只列排查中真正会被问到的能力项✅ 为完整支持⚠️ 为部分支持❌ 为不支持能力项witrpslsofsystemctl进程祖先链追踪✅❌❌❌按端口反查进程✅❌✅❌按打开的文件反查进程✅❌✅❌启动源识别unit/守护/容器/会话✅❌❌⚠️环境变量展示✅⚠️❌❌容器环境识别✅❌❌❌没有全能选手选哪个工具取决于你要找的是状态、句柄还是那条启动链。端口被占时怎么查跟一次真实排查场景部署报错address already in use3000 端口被一个来路不明的 node 占着。传统组合至少三四个命令还得自己对照 ppid 一层层往上追ss -ltnp | grep :3000 ps -o pid,ppid,user,cmd -p pid # ppid 指向 PM2再往上才是 pm2-deploy.servicewitr 只需一条witr --port 3000关键输出Process为node (pid 14233)Source为pm2-deploy.service (systemd)Why It Exists给出systemd (pid 1) → PM2 v5.3.1: God (pid 5034) → node (pid 14233)Working Dir为/srv/expense-managerSockets为127.0.0.1:3000 (TCP | LISTENING)。启动链、归属服务、工作目录、监听方式一次拿全不用在几个输出之间来回比对。安全、兼容与注意事项查询全程只读不发送信号、不改动系统状态TUI 交互模式可发信号查询命令本身只读。兼容性上是单一静态二进制覆盖 Linux、macOS、FreeBSD、WindowsLinux 功能最全Windows 直接调用 Win32 API不依赖 PowerShell 或 WMI。查看其他用户的进程环境变量、完整上下文时Linux/macOS 可能需要 sudoWindows 需管理员终端--container依赖 PATH 中存在对应运行时 CLIdocker、podman、crictl 等systemd socket 激活的端口会解析到 PID 1需结合容器回退信息判断什么时候值得引入什么时候不必如果ps加systemctl两秒就能给出答案不必加新工具如果进程由 PM2、supervisor、cron 这类用户态守护进程拉起或跑在容器里建议用 witr 追一遍祖先链如果团队跨 Linux 与 macOS希望同一条排查路径在两种系统上输出结构一致值得引入开篇那个 node 进程现在一条witr --port 3000就能给出完整链、启动源和归属目录。Unix 可用curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash安装Windows 用winget install -e --id PranshuParmar.witrflag 与输出格式说明见 README 和 CLI 手册。把它放进排查工具箱时把它当 ps、lsof、systemctl 的补充层而不是替代品。【免费下载链接】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),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询