一个命令告诉你「这个进程为什么会运行」!比 ps、lsof 更直观的神器:witr

无论是在 Linux、macOS 还是 Windows 上排查问题,我们或许会遇到这样的问题:端口被谁占用?Java 服务是谁启动的?Docker 容器里的进程从哪里来的?

为了理清这些进程关系,我们往往需要在 ps、lsof、systemctl、docker ps 等工具中来回切换查看输出信息梳理关系。

有一款工具-witr,它不输出有什么进程在运行,而是自动分析进程的启动来源,并以清晰的因果链展示整个启动过程。

1-cover.png


简介

witr(直译:Why Is This Running)是一款跨平台命令行工具,它关注的不是有哪些进程在运行,而是一个进程为什么会运行。

witr 会自动分析父子进程关系以及 systemd、launchd、Windows Service、Docker、Shell、PM2、Supervisor 等运行环境,生成一条完整的进程启动链。


安装

支持 Linux、macOS、FreeBSD 和 Windows 系统。

脚本安装

# Homebrew(推荐)
brew install witr

# Linux、macOS
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash

# Windows(PowerShell)
irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex

安装包

公 Zhong 号 BugShare 内发送 witr启动链 获取对应平台的二进制文件。

# 安装二进制
/usr/local/bin/witr

# 安装手册页
/usr/local/share/man/man1/witr.1

基本使用

-p, --pid         根据 PID 查询
-o, --port        根据端口查询
-c, --container   查询容器
-t, --tree        树状显示启动链
-s, --short       简洁输出
-i, --interactive TUI 模式
  --json          将结果以 JSON 格式输出
  --no-color      禁用彩色终端输出
-v, --version    显示 witr 版本信息

基于名称查询

witr python

输出:

[1] uv (pid 22655)
    /Users/zhoupb/.local/bin/uv run /Users/zhoupb/workspace-ai/atnk-ai/.venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --reload
[2] python3.12 (pid 22656)
    /Users/zhoupb/workspace-ai/atnk-ai/.venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --reload
[3] python3.12 (pid 22657)
    /Users/zhoupb/workspace-ai/atnk-ai/.venv/bin/python -c from multiprocessing.resource_tracker import main;main(6)
[4] python3.12 (pid 22669)
    /Users/zhoupb/workspace-ai/atnk-ai/.venv/bin/python -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=7, pipe_handle=28) --multiprocessing-fork

短输出

witr --port 8000 --short

输出:

[1] python3.12 (pid 22656)
    /Users/zhoupb/workspace-ai/atnk-ai/.venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --reload
[2] python3.12 (pid 22669)
    /Users/zhoupb/workspace-ai/atnk-ai/.venv/bin/python -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=7, pipe_handle=28) --multiprocessing-fork

树形输出

witr --pid 22669 --tree

输出:

launchd (pid 1)
  └─ pycharm (pid 10909)
    └─ uv (pid 22655)
      └─ python3.12 (pid 22656)
        └─ python3.12 (pid 22669)

基于容器的查询

witr --container redis

输出:

Target      : container redis

Container   : redis (id 4679c2849c52)
Image       : redis
Command     : docker-entrypoint.sh redis-server
Started     : 2 hours ago (Mon 2026-07-13 01:48:00 +00:00)
Created     : Mon 2025-10-27 10:18:40 +08:00
Network     : bridge

Why It Exists :
  docker → redis

Source      : docker
Sockets     : 0.0.0.0:6379->6379/tcp
              [::]:6379->6379/tcp

Note        : The owning process is not visible in this environment.

TUI 交互模式

直接运行 witr 或使用 witr -i 即可进入 TUI(终端交互界面)。
交互模式提供了一个基于终端的实时仪表板,其中包含四个选项卡,分别用于浏览进程、端口、容器和文件锁。

PixPin_2026-07-13_13-01-39.png


写在最后

在日常开发和运维中,我们早已习惯使用 pstoplsofss 等工具查看系统状态,但真正耗时的往往不是查看进程,而是理清它们之间的启动关系。

witr 将这些零散的信息串联起来,以一条清晰的启动链告诉你一个进程为什么会存在,让问题排查变得更加直观、高效。

posted @ 2026-07-13 14:14  BugShare  阅读(16)  评论(0)    收藏  举报