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ăngPhím tắtGiả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ổngpXem chiếm dụng cổng và tiến trình tương ứng
Chi tiết tiến trìnhEnterCâ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ệukKill, Terminate, Pause, Resume
Điều chỉnh ưu tiênrRenice 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úc
  • SIGTERM (15) — Kết thúc thanh lịch
  • SIGSTOP (19) — Tạm dừng
  • SIGCONT (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ăngWitrhtoppslsof
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ở

Bài viết liên quan