- Witr (why-is-this-running) 는 리눅스 시스템에서 특정 프로세스, 서비스, 또는 포트가 왜 실행 중인지를 명확히 보여주는 도구
- 기존
ps,top,lsof등이 단순히 “무엇이 실행 중인지”만 보여주는 것과 달리, “왜 실행 중인지”의 인과 관계를 한 화면에 표시 - PID 기반 분석을 통해 프로세스의 기원, 실행 경로, 유지 원인, 소속 컨텍스트를 추적
- systemd, docker, pm2, cron, shell 등 다양한 소스와 연계해 실행 원인을 설명하며, 읽기 전용·비파괴적으로 동작
- 디버깅과 장애 대응 시 이해 시간을 단축하고, 복잡한 시스템의 실행 구조를 한눈에 파악할 수 있는 도구
목적과 개념
-
Witr의 핵심 질문은 “왜 이것이 실행 중인가? (why-is-this-running)”임
- 프로세스, 서비스, 포트 등 실행 중인 모든 항목의 기원과 원인을 추적
- 여러 계층(supervisor, container, service, shell 등)에 걸친 간접적 실행 원인을 명시적으로 보여줌
- 기존 도구들이 상태와 메타데이터만 제공하는 반면, Witr는 인과 관계를 명확히 표현
- 결과적으로 “무엇이, 어떻게, 왜, 어떤 맥락에서 실행 중인지”를 사람이 읽기 쉬운 형태로 출력
주요 목표
- 프로세스 존재 이유를 설명하고, 단순 실행 여부 이상의 정보를 제공
- 디버깅 및 장애 대응 시간 단축
- 설정 없이 바로 사용 가능, 읽기 전용·안전성 보장
- 완전성보다 명확성을 우선
- 모니터링, 성능 분석, 자동 복구 기능은 포함하지 않음
작동 원리
- 모든 대상을 프로세스(PID) 중심으로 해석
- 포트, 서비스, 컨테이너, 명령어 모두 PID로 연결
- PID를 기준으로 실행 인과 체인(causal chain) 을 구성
- 핵심 질문 네 가지
- 무엇이 실행 중인가
- 어떻게 시작되었는가
- 무엇이 유지시키고 있는가
- 어떤 컨텍스트에 속하는가
지원 대상
-
프로세스/서비스 이름, PID, 포트 번호를 입력 대상으로 지원
- 이름 입력 시 여러 프로세스가 일치하면 PID 선택을 요청
-
--pid,--port옵션으로 특정 프로세스나 포트 기반 분석 가능
출력 구조
- Target: 사용자가 지정한 대상
- Process: 실행 파일, PID, 사용자, 명령어, 시작 시각, 재시작 횟수
- Why It Exists: 프로세스의 인과 계보(ancestry chain)
- Source: 실행을 담당한 주요 시스템 (예: systemd, docker, pm2, cron, shell 중 하나)
- Context: 작업 디렉터리, Git 저장소, Docker 컨테이너, 바인드 정보 등
- Warnings: 루트 권한 실행, 공용 인터페이스 리스닝, 장기 실행, 메모리 과다 사용 등 비차단 경고
명령줄 옵션
-
--pid,--port: 특정 PID 또는 포트 분석 -
--short: 한 줄 요약 -
--tree: 전체 프로세스 트리 표시 -
--json: JSON 형식 출력 -
--warnings: 경고만 표시 -
--no-color: 색상 비활성화 -
--env: 환경 변수만 표시 -
--help: 도움말 표시
설치 및 제거
- 단일 정적 Linux 바이너리 형태로 배포
-
스크립트 설치(권장)
-
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash - CPU 아키텍처 자동 감지 후
/usr/local/bin/witr에 설치
-
-
수동 설치
-
amd64,arm64용 바이너리 직접 다운로드 및 체크섬 검증 - 실행 권한 부여 후 PATH에 이동
-
-
검증 및 제거
-
witr --version,man witr로 확인 -
sudo rm -f /usr/local/bin/witr로 제거 가능
-
-
Nix Flake 지원:
nix run github:pranshuparmar/witr -- --port 5000으로 실행 가능
플랫폼 및 권한
- Linux 전용
-
/proc접근을 통해 정보 수집- 일부 프로세스 정보 확인에는 sudo 권한 필요