无论是在 Linux、macOS 还是 Windows 上排查问题,我们或许会遇到这样的问题:端口被谁占用?Java 服务是谁启动的?Docker 容器里的进程从哪里来的?
为了理清这些进程关系,我们往往需要在 ps、lsof、systemctl、docker ps 等工具中来回切换查看输出信息梳理关系。
有一款工具-witr,它不输出有什么进程在运行,而是自动分析进程的启动来源,并以清晰的因果链展示整个启动过程。

简介
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 版本信息
基于名称查询
输出:
[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
短输出
输出:
[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
树形输出
输出:
launchd (pid 1)
└─ pycharm (pid 10909)
└─ uv (pid 22655)
└─ python3.12 (pid 22656)
└─ python3.12 (pid 22669)
基于容器的查询
输出:
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(终端交互界面)。
交互模式提供了一个基于终端的实时仪表板,其中包含四个选项卡,分别用于浏览进程、端口、容器和文件锁。

写在最后
在日常开发和运维中,我们早已习惯使用 ps、top、lsof、ss 等工具查看系统状态,但真正耗时的往往不是查看进程,而是理清它们之间的启动关系。
witr 将这些零散的信息串联起来,以一条清晰的启动链告诉你一个进程为什么会存在,让问题排查变得更加直观、高效。