ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

如何一条命令查清进程启动链:witr 进程溯源工具选型指南

如何一条命令查清进程启动链:witr 进程溯源工具选型指南 如何一条命令查清进程启动链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端口被占用lsof只报出一个 PID却查不到到底是谁拉起了这个进程——这类排查往往就卡在这一步。witr 是一个进程溯源与启动链分析工具给定进程名、端口、PID、文件或容器名它能沿父进程链向上回溯一条命令还原目标从 systemd、cron、容器到 shell 的完整启动路径。十秒对比witr 和 ps、lsof、systemctl 的能力速查表先给结论细节后文展开能力项witrpslsofsystemctl启动链追溯沿父进程回溯到 PID 1✅❌❌❌由端口反查归属进程✅❌✅❌启动源归属systemd 单元 / cron / 容器 / shell✅❌❌⚠️工作目录与 Git 仓库上下文✅❌⚠️❌监听公网接口、root 运行等风险提示✅❌❌❌说明systemctl对 systemd 托管的服务能回答归哪个单元管但给不出进程级的父子链lsof能看 cwd但需要自己拼-p参数且止于 PID 这一层。替代工具逐个看ps、lsof、systemctl 的能力边界ps擅长状态快照它擅长的是此刻有什么在跑ps aux能列出全部进程的 PID、CPU、内存加--forest还能画一棵进程树做资源盘点很顺手。它覆盖不到的是因果。ps输出的是状态快照父进程列PPID只给出一级关系多层级的启动路径要靠人肉逐层往上对进程为什么还存在——是被哪个服务管理器保活、还是某个会话里手动起的——它不回答。lsof擅长把资源映射到 PID它擅长的是谁在占用lsof -i :8000查端口归属lsof -p pid查打开的文件描述符lsof -n | grep pid看某进程握有哪些文件。文件级定位能力是传统工具里最强的。它覆盖不到的是进程为什么存在。查到 PID 之后链条就断了这个 PID 是 systemd 拉起的、pm2 派生的、还是容器 entrypointlsof不提供任何上层信息跨容器边界时它也只能看到 PID 内的视角。systemctl擅长 systemd 服务的状态与配置它擅长的是服务归谁管systemctl status postgresql给出单元状态、依赖、日志位置systemctl cat能看到单元定义排查 systemd 托管服务很直接。它覆盖不到的是非 systemd 世界。手动启动的进程、由 supervisor 或容器 runtime 拉起的进程、cron 定时任务派生的进程都不在它的查询范围内它也不提供进程父子关系只有单元维度的状态。本项目真正不同的地方入口收敛。进程名、端口、PID、文件、容器名统一映射到 PID 再回溯四种入口可混用、可重复witr --port 8000 --file .git/index.lock --pid 51022输出直接给链还给源。结果里的Why It Exists字段是完整祖先链Source字段进一步归因到具体启动源systemd 单元、pm2、cron、SSH 会话、Docker 容器等witr --port 5432 --tree自带风险告警。对目标进程做只读检查报告监听公网接口、以 root 运行、内存超阈值、二进制已被删除等观察项可用独立模式输出也带明确的退出码0 正常 / 1 有告警 / 2 未找到 / 3 权限不足方便接脚本witr --pid 40217 --warnings完整参数见 命令参考。跟着场景走一遍端口被占用、文件被锁怎么查场景一发布时 EADDRINUSE8000 端口被占现象新版本的 Node 服务起不来日志报EADDRINUSE :::8000。一条命令witr --port 8000输出说明了什么占用者不是残留的 node而是python3 (pid 40217)命令是python3 -m http.server 8000Why It Exists链显示tmux: server (pid 38102) → bash (pid 38921) → python3 (pid 40217)Source指向一个交互式 tmux 会话——是同事手动起的调试服务器不是系统服务。结论先找人对一下而不是直接 kill。场景二git commit 被 index.lock 挡住现象git commit失败提示.git/index.lock已存在。一条命令witr --file .git/index.lock输出说明了什么锁由git (pid 51022)持有其父进程是 crontab 里的备份脚本。锁会随任务结束自动释放正确动作是等任务跑完而不是删锁文件。什么时候不必换witr 的适用边界只想快速看谁在吃 CPU、内存ps或top更直接不需要溯源。机器上服务全部由 systemd 托管且你只关心单元状态、启停历史和配置systemctl已经够用。需要逐条核对某个进程打开的文件描述符与 socketlsof -p pid的粒度更细。witr 读取/proc等信息需要权限查看其他用户的进程要sudomacOS 上受 SIP 限制部分系统进程细节拿不到。它做的是只读检查不提供启动、停止服务这类操作能力这些场景仍应交给原生命令。安装方面仓库提供了跨平台的 install.sh 脚本也有 brew、apt、winget、conda 等包管理器渠道可选。回到开头的场景端口被占时你缺的往往不是 PID而是那一串父进程。witr 把这条链一次性打印出来——至于接下来 kill 它、等它结束、还是先找人对一下判断仍然在你手里。【免费下载链接】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),仅供参考
返回列表