Vấn đề: CPU của bạn đang chạy cái gì?
Quạt laptop quay điên cuồng, pin tụt nhanh, nhưng bạn không biết thủ phạm là ai. Mở Activity Monitor hay Task Manager, chỉ thấy một đống tên tiến trình, nhưng không trả lời được câu hỏi căn bản nhất:
“Why is this running?”
- Tiến trình này do ai khởi động?
- Tại sao nó vẫn đang chạy?
- Nó chiếm dụng những cổng nào?
- Tiến trình con của nó là gì?
- Giết nó có ảnh hưởng gì khác không?
Công cụ truyền thống (htop, top, ps) chỉ cho bạn ảnh chụp nhanh, không cho bạn phả hệ.
Witr là gì?
Witr (“Why is this running?”) là công cụ phân tích tiến trình mã nguồn mở được viết bằng Go. Nó có 15.042+ Stars trên GitHub, trả lời câu hỏi tối thượng trong lòng mọi quản trị viên hệ thống và lập trình viên.
Khả năng cốt lõi của Witr: hiển thị chuỗi nhân quả đầy đủ của tiến trình — từ hệ thống init đến tiến trình mục tiêu, hiển thị đầy đủ cây gia đình “ai sinh ra ai”.
Tính năng chính
1. Cây phả hệ tiến trình (Process Ancestry)
Tính năng sát thủ của Witr. Chạy witr <PID>, bạn sẽ thấy:
init(1)
└── systemd(1234)
└── dockerd(5678)
└── containerd-shim(9012)
└── node(3456) ← Your App
├── npm(7890)
└── webpack-dev-server(2345)
Nhìn một cái là hiểu: Tiến trình Node.js này nằm trong container Docker, được systemd khởi động, webpack-dev-server là tiến trình con của nó.
2. Chế độ TUI tương tác
Witr không chỉ là đầu ra dòng lệnh, nó có giao diện người dùng terminal đầy đủ:
| Tính năng | Phím tắt | Giải thích |
|---|---|---|
| Danh sách tiến trình thời gian thực | ↑↓ | Tất cả tiến trình đang chạy, hỗ trợ sắp xếp lọc |
| Chế độ xem cổng | p | Xem chiếm dụng cổng và tiến trình tương ứng |
| Chi tiết tiến trình | Enter | Cây phả hệ đầy đủ, tiến trình con, biến môi trường, thư mục làm việc |
| Gửi tín hiệu | k | Kill, Terminate, Pause, Resume |
| Điều chỉnh ưu tiên | r | Renice tiến trình |
| Hỗ trợ chuột | 🖱️ | Nhấp để sắp xếp, chọn hàng |
3. Chế độ xem cổng
$ witr --ports
PORT PROTO PROCESS PID USER
8080 TCP node 3456 ubuntu
3000 TCP webpack-dev 2345 ubuntu
5432 TCP postgres 5678 postgres
22 TCP sshd 1234 root
Nhìn một cái là biết ai đang lắng nghe cổng nào, không cần lsof -i :8080 nữa.
4. Biến môi trường và thư mục làm việc
$ witr 3456 --env
PID: 3456
Command: node server.js
Working Directory: /home/ubuntu/myapp
Environment Variables:
NODE_ENV=production
PORT=8080
DATABASE_URL=postgresql://...
API_KEY=sk-***
Thần khí để debug vấn đề cấu hình — xem trực tiếp môi trường mà tiến trình thực sự đang chạy.
5. Gửi tín hiệu
Gửi tín hiệu trực tiếp từ TUI:
SIGKILL(9) — Buộc kết thúcSIGTERM(15) — Kết thúc thanh lịchSIGSTOP(19) — Tạm dừngSIGCONT(18) — Tiếp tục
Không cần nhớ kill -9 PID, nhấn k và chọn là xong.
Cài đặt
Cài đặt một dòng
# macOS / Linux
curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/witr-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') -o witr
chmod +x witr
sudo mv witr /usr/local/bin/
# Cài đặt Go
go install github.com/pranshuparmar/witr/cmd/witr@latest
Nền tảng hỗ trợ
- ✅ Linux
- ✅ macOS
- ✅ Windows
- ✅ FreeBSD
Ví dụ sử dụng
Cách dùng cơ bản
# Khởi động TUI tương tác
witr
# Xem cây phả hệ của tiến trình cụ thể
witr 3456
# Xem chiếm dụng cổng
witr --ports
# Xem biến môi trường tiến trình
witr 3456 --env
# Chế độ giám sát liên tục
witr --watch
Kịch bản thực tế
Kịch bản 1: Tìm thủ phạm tiêu hao pin
$ witr
# Sắp xếp theo CPU, phát hiện tiến trình node chiếm 80%
# Enter xem chi tiết: là webpack-dev-server
# k → SIGTERM → Tắt thanh lịch
Kịch bản 2: Xung đột cổng
$ witr --ports
# Phát hiện 8080 bị chiếm
# Xem tiến trình: là server test để lại từ hôm qua
# k → SIGKILL → Giải phóng cổng
Kịch bản 3: Debug container
$ witr $(docker inspect -f '{{.State.Pid}}' mycontainer)
# Xem cây phả hệ tiến trình trong container
# Biến môi trường, thư mục làm việc nhìn một cái là hiểu
So sánh với công cụ tương tự
| Tính năng | Witr | htop | ps | lsof |
|---|---|---|---|---|
| Cây phả hệ tiến trình | ✅ Đầy đủ | ❌ Không | ❌ Không | ❌ Không |
| TUI tương tác | ✅ Có | ✅ Có | ❌ Không | ❌ Không |
| Chế độ xem cổng | ✅ Tích hợp | ❌ Không | ❌ Không | ✅ Có |
| Biến môi trường | ✅ Một cú nhấp | ❌ Không | ⚠️ Phức tạp | ❌ Không |
| Gửi tín hiệu | ✅ Tương tác | ⚠️ Hạn chế | ❌ Không | ❌ Không |
| Hỗ trợ chuột | ✅ Có | ✅ Có | ❌ Không | ❌ Không |
| Đa nền tảng | ✅ 4 nền tảng | ✅ Đa nền tảng | ✅ Phổ thông | ✅ Đa nền tảng |
Kiến trúc
Witr được viết bằng Go, tận dụng API gốc của hệ điều hành:
- Linux: Hệ thống tệp
/proc - macOS:
libproc+sysctl - Windows: Windows API
- FreeBSD:
kvm+sysctl
Triển khai Go thuần túy, không phụ thuộc CGO (trừ Windows), tệp nhị phân đơn lẻ, không phụ thuộc.
Kết luận
Witr không phải là sự thay thế cho htop, mà là công cụ chuyên dụng để debug tiến trình. Khi bạn cần trả lời “Why is this running?”, Witr nhanh hơn bất kỳ công cụ nào.
- 15K+ Stars chứng minh nó giải quyết vấn đề thực sự
- Tệp nhị phân đơn lẻ, dùng được ở mọi nơi
- Trải nghiệm TUI mượt mà, hỗ trợ cả chuột và bàn phím
GitHub: pranshuparmar/witr
Stars: 15.042+ | Ngôn ngữ: Go | Giấy phép: Mã nguồn mở

有问题或想法?欢迎在下方留下你的评论。使用 GitHub 账号登录即可参与讨论。