Witr
리눅스 시스템에서 프로세스가 실행 중인 이유를 설명하는 도구
About
- Witr (why-is-this-running) 는 리눅스 시스템에서 특정 프로세스, 서비스, 또는 포트가 왜 실행 중인지를 명확히 보여주는 도구
- 기존 ps, top, lsof 등이 단순히 “무엇이 실행 중인지”만 보여주는 것과 달리, “왜 실행 중인지”의 인과 관계를 한 화면에 표시
- PID 기반 분석을 통해 프로세스의 기원, 실행 경로, 유지 원인, 소속 컨텍스트를 추적
- systemd, docker, pm2, cron, shell 등 다양한 소스와 연계해 실행 원인을 설명하며, 읽기 전용·비파괴적으로 동작
- 디버깅과 장애 대응 시 이해 시간을 단축하고, 복잡한 시스템의 실행 구조를 한눈에 파악할 수 있는 도구
목적과 개념
- Witr의 핵심 질문은 “왜 이것이 실행 중인가? (why-is-this-running)”임
- 프로세스, 서비스, 포트 등 실행 중인 모든 항목의 기원과 원인을 추적
- 여러 계층(supervisor, container, service, shell 등)에 걸친 간접적 실행 원인을 명시적으로 보여줌
주요 목표
- 프로세스 존재 이유를 설명하고, 단순 실행 여부 이상의 정보를 제공
- 디버깅 및 장애 대응 시간 단축
- 설정 없이 바로 사용 가능, 읽기 전용·안전성 보장
- 완전성보다 명확성을 우선
- 모니터링, 성능 분석, 자동 복구 기능은 포함하지 않음
작동 원리
- 모든 대상을 프로세스(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: 루트 권한 실행, 공용 인터페이스 리스닝, 장기 실행, 메모리 과다 사용 등 비차단 경고