문제: 당신의 CPU는 도대체 무엇을 실행하고 있나요?
노트북 팬이 미친 듯이 돌고 배터리가 빠르게 소모되지만, 범인이 누군지 모릅니다. Activity Monitor나 Task Manager를 열면 프로세스 이름들만 보이고, 근본적인 질문에는 답할 수 없습니다:
“Why is this running?”
- 이 프로세스는 누가 시작했나요?
- 왜 아직 실행 중인가요?
- 어떤 포트를 점유하고 있나요?
- 하위 프로세스는 무엇인가요?
- 종료하면 다른 것에 영향을 미치나요?
기존 도구(htop, top, ps)는 스냅샷만 제공하고 계보는 제공하지 않습니다.
Witr란 무엇인가?
Witr (“Why is this running?")는 Go로 작성된 오픈소스 프로세스 분석 도구입니다. GitHub에서 15,042+ Stars를 보유하고 있으며, 모든 시스템 관리자와 개발자가 가장 궁금해하는 질문에 답합니다.
Witr의 핵심 기능: 프로세스의 완전한 인과 관계 체인을 보여줍니다 — init 시스템부터 대상 프로세스까지, “누가 누구를 낳았는지"를 완전히 보여주는 가족 트리입니다.
핵심 기능
1. 프로세스 계보 트리(Process Ancestry)
Witr의 킬러 기능입니다. witr <PID>를 실행하면:
init(1)
└── systemd(1234)
└── dockerd(5678)
└── containerd-shim(9012)
└── node(3456) ← Your App
├── npm(7890)
└── webpack-dev-server(2345)
한눈에 보기: 이 Node.js 프로세스는 Docker 컨테이너 안에 있고, systemd에 의해 시작되었으며, webpack-dev-server는 그 하위 프로세스입니다.
2. 인터랙티브 TUI 모드
Witr는 단순한 명령줄 출력이 아니라 완전한 터미널 사용자 인터페이스를 갖추고 있습니다:
| 기능 | 단축키 | 설명 |
|---|---|---|
| 실시간 프로세스 목록 | ↑↓ | 모든 실행 중인 프로세스, 정렬 및 필터링 지원 |
| 포트 뷰 | p | 열린 포트와 해당 프로세스 즉시 확인 |
| 프로세스 상세 정보 | Enter | 완전한 계보 트리, 하위 프로세스, 환경 변수, 작업 디렉토리 |
| 신호 전송 | k | Kill, Terminate, Pause, Resume |
| 우선순위 조정 | r | Renice 프로세스 |
| 마우스 지원 | 🖱️ | 정렬, 행 선택 클릭 |
3. 포트 뷰
$ 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
누가 어떤 포트를 수신 대기하는지 한눈에 파악, 더 이상 lsof -i :8080이 필요 없습니다.
4. 환경 변수 및 작업 디렉토리
$ 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-***
구성 문제 디버깅의 신기 — 프로세스가 실제로 실행되는 환경을 직접 확인합니다.
5. 신호 전송
TUI에서 직접 신호를 보냅니다:
SIGKILL(9) — 강제 종료SIGTERM(15) — 우아한 종료SIGSTOP(19) — 일시 중지SIGCONT(18) — 재개
kill -9 PID를 외울 필요 없이, k를 누르고 선택하면 됩니다.
설치
원클릭 설치
# 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/
# Go 설치
go install github.com/pranshuparmar/witr/cmd/witr@latest
지원 플랫폼
- ✅ Linux
- ✅ macOS
- ✅ Windows
- ✅ FreeBSD
사용 예시
기본 사용법
# 인터랙티브 TUI 시작
witr
# 특정 프로세스의 계보 트리 확인
witr 3456
# 포트 점유 확인
witr --ports
# 프로세스 환경 변수 확인
witr 3456 --env
# 지속 모니터링 모드
witr --watch
실제 시나리오
시나리오 1: 배터리 소모 범인 찾기
$ witr
# CPU로 정렬, node 프로세스가 80% 차지
# Enter로 상세 정보 확인: webpack-dev-server
# k → SIGTERM → 우아하게 종료
시나리오 2: 포트 충돌
$ witr --ports
# 8080이 점유된 것 발견
# 프로세스 확인: 어제 남겨진 테스트 서버
# k → SIGKILL → 포트 해제
시나리오 3: 컨테이너 디버깅
$ witr $(docker inspect -f '{{.State.Pid}}' mycontainer)
# 컨테이너 내 프로세스의 계보 트리 확인
# 환경 변수, 작업 디렉토리 한눈에 보기
유사 도구 비교
| 기능 | Witr | htop | ps | lsof |
|---|---|---|---|---|
| 프로세스 계보 트리 | ✅ 완전 | ❌ 없음 | ❌ 없음 | ❌ 없음 |
| 인터랙티브 TUI | ✅ 예 | ✅ 예 | ❌ 아니오 | ❌ 아니오 |
| 포트 뷰 | ✅ 내장 | ❌ 없음 | ❌ 없음 | ✅ 예 |
| 환경 변수 | ✅ 원클릭 | ❌ 없음 | ⚠️ 복잡 | ❌ 없음 |
| 신호 전송 | ✅ 인터랙티브 | ⚠️ 제한적 | ❌ 없음 | ❌ 없음 |
| 마우스 지원 | ✅ 예 | ✅ 예 | ❌ 아니오 | ❌ 아니오 |
| 크로스 플랫폼 | ✅ 4개 플랫폼 | ✅ 다중 플랫폼 | ✅ 범용 | ✅ 다중 플랫폼 |
아키텍처
Witr는 Go로 작성되었으며 운영 체제 기본 API를 활용합니다:
- Linux:
/proc파일 시스템 - macOS:
libproc+sysctl - Windows: Windows API
- FreeBSD:
kvm+sysctl
순수 Go 구현, CGO 의존성 없음(Windows 제외), 단일 바이너리 파일, 제로 의존성.
결론
Witr는 htop의 대체품이 아니라 프로세스 디버깅 전용 도구입니다. “Why is this running?“이라는 질문에 답해야 할 때, Witr는 어떤 도구보다 빠릅니다.
- 15K+ Stars는 실제 문제를 해결했음을 증명합니다
- 단일 바이너리 파일, 어디서든 사용 가능
- TUI 경험이 부드럽고, 마우스와 키보드 모두 지원
GitHub: pranshuparmar/witr
Stars: 15,042+ | Language: Go | License: 오픈소스

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