Show HN: Witr – 解释 Linux 系统中进程运行的原因

Show HN: Witr – 解释 Linux 系统中进程运行的原因

Hacker News 摘要

原标题:Show HN: Witr – Explain why a process is running on your Linux system

Witr 是一个专门用于回答这个进程为什么在运行的 Linux 系统工具。在 Linux 系统中,当一个进程、服务或端口处于运行状态时,背后通常都有一个原因。这个原因往往是间接的、不明显的,或者跨越了多个层级,例如守护进程、容器、服务管理器或终端。

虽然传统的系统工具如 pstoplsofsssystemctldocker ps 可以展示系统的状态和元数据,告诉用户什么在运行,但它们通常需要用户手动关联不同工具的输出才能推断出原因。Witr 的作用是让这种因果关系变得显而易见,它能在一个易于阅读的界面中解释一个运行中的对象来自哪里、是如何启动的,以及当前是由哪个系统链条负责维持其运行。

核心目标与定位

Witr 的设计初衷包括:

解释原因:侧重于解释进程存在的原因,而不仅仅是确认它存在。

缩短时间:在排查故障或系统停机时,帮助工程师快速理解现状。

零配置:无需复杂设置即可直接使用。

安全只读:采用只读操作,不会对系统造成破坏。

追求清晰:相比于信息的完整堆砌,更看重输出内容的清晰度。

该工具并非监控工具或性能分析器,也不旨在替代 systemd 或 Docker 的原生工具,更不会提供自动修复功能。

工作原理

Witr 将所有的查询请求(如端口、服务或命令)都转化为进程问题。一旦确定了具体的进程识别号即 PID,Witr 就会构建一条因果链。它主要回答四个问题:什么在运行、它是如何启动的、是什么在维持它运行、它属于什么上下文环境。

支持的查询目标

用户可以通过以下三种方式启动分析:

1. 名称查询:直接输入进程或服务的名称,例如 witr nodewitr nginx。如果存在多个同名匹配项,程序会提示用户通过 PID 进行区分。

2. PID 查询:使用 --pid 参数分析特定的进程。

3. 端口查询:使用 --port 参数分析正在监听特定端口的进程。

输出内容组成

Witr 的输出结果通常保持在一个屏幕内,并包含以下几个标准化板块:

目标:显示用户请求查询的对象。

进程信息:包括可执行文件、PID、运行用户、完整命令、启动时间以及重启次数。

存在原因:这是该工具的核心价值所在,它会展示一个因果祖先链。例如:systemd (pid 1) -> pm2 (pid 5034) -> node (pid 14233)

来源:识别负责管理该进程的主要系统,如 systemd 单元、Docker 容器、pm2、cron 或交互式终端。

上下文:提供工作目录、Git 仓库名称及分支、Docker 容器镜像名称、网络绑定情况(公网或私网)等。

警示信息:提供非阻塞的观察结果,例如进程是否以 root 权限运行、是否监听在公网接口、是否频繁重启、内存占用是否超过 1GB,以及运行时间是否超过 90 天。

常用命令行选项

--pid:解释特定 PID 的背景。

--port:解释特定端口的使用情况。

--short:提供单行摘要输出。

--tree:显示完整的进程祖先树。

--json:以 JSON 格式输出结果,便于程序处理。

--warnings:仅显示警告信息。

--no-color:禁用彩色显示。

--env:仅显示该进程的环境变量。

安装与运行环境

Witr 仅支持 Linux 平台,并以静态二进制文件形式分发,支持 amd64 和 arm64 架构。用户可以通过官方提供的脚本进行快速安装,脚本会自动检测架构并将程序安装到 /usr/local/bin/witr,同时安装相关的参考手册。

在权限方面,由于 Witr 需要检查 /proc 文件系统,在分析某些受限进程时可能需要提升权限。如果无法看到完整的进程祖先或环境信息,建议配合 sudo 使用。该项目在开发过程中也借助了 GitHub Copilot 和 ChatGPT 等 AI 工具的辅助。


原文:https://github.com/pranshuparmar/witr

评论:https://news.ycombinator.com/item?id=46392910

Report Page