无论是在 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 版本信息
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.
直接运行
witr 或使用
witr -i 即可进入 TUI(终端交互界面)。 交互模式提供了一个基于终端的实时仪表板,其中包含四个选项卡,分别用于浏览进程、端口、容器和文件锁。

在日常开发和运维中,我们早已习惯使用
ps、
top、
lsof、
ss 等工具查看系统状态,但真正耗时的往往不是查看进程,而是理清它们之间的启动关系。
witr 将这些零散的信息串联起来,以一条清晰的启动链告诉你一个进程为什么会存在,让问题排查变得更加直观、高效。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047890/viewspace-3175759/ ,如需转载,请注明出处,否则将追究法律责任。