리눅스 시스템에서 프로세스가 실행 중인 이유를 설명하는 도구 Witr

1 month ago 11

  • Witr는 리눅스 시스템에서 특정 프로세스, 서비스, 또는 포트가 왜 실행 중인지를 명확히 보여주는 도구
  • 기존 ps, top, lsof 등이 단순히 “무엇이 실행 중인지”만 보여주는 것과 달리, “왜 실행 중인지”의 인과 관계를 한 화면에 표시
  • PID 기반 분석을 통해 프로세스의 기원, 실행 경로, 유지 원인, 소속 컨텍스트를 추적
  • systemd, docker, pm2, cron, shell 등 다양한 소스와 연계해 실행 원인을 설명하며, 읽기 전용·비파괴적으로 동작
  • 디버깅과 장애 대응 시 이해 시간을 단축하고, 복잡한 시스템의 실행 구조를 한눈에 파악할 수 있는 도구

목적과 개념

  • Witr의 핵심 질문은 “왜 이것이 실행 중인가?”임
    • 프로세스, 서비스, 포트 등 실행 중인 모든 항목의 기원과 원인을 추적
    • 여러 계층(supervisor, container, service, shell 등)에 걸친 간접적 실행 원인을 명시적으로 보여줌
  • 기존 도구들이 상태와 메타데이터만 제공하는 반면, Witr는 인과 관계를 명확히 표현
  • 결과적으로 “무엇이, 어떻게, 왜, 어떤 맥락에서 실행 중인지”를 사람이 읽기 쉬운 형태로 출력

주요 목표

  • 프로세스 존재 이유를 설명하고, 단순 실행 여부 이상의 정보를 제공
  • 디버깅 및 장애 대응 시간 단축
  • 설정 없이 바로 사용 가능, 읽기 전용·안전성 보장
  • 완전성보다 명확성을 우선
  • 모니터링, 성능 분석, 자동 복구 기능은 포함하지 않음

작동 원리

  • 모든 대상을 프로세스(PID) 중심으로 해석
    • 포트, 서비스, 컨테이너, 명령어 모두 PID로 연결
    • PID를 기준으로 실행 인과 체인(causal chain) 을 구성
  • 핵심 질문 네 가지
    1. 무엇이 실행 중인가
    2. 어떻게 시작되었는가
    3. 무엇이 유지시키고 있는가
    4. 어떤 컨텍스트에 속하는가

지원 대상

  • 프로세스/서비스 이름, 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: 도움말 표시

출력 예시

  • 이름 기반 조회: witr node → systemd → pm2 → node 형태의 실행 경로 표시
  • 짧은 출력: --short 옵션으로 한 줄 인과 체인 표시
  • 트리 출력: --tree 옵션으로 계층 구조 시각화
  • 다중 일치: 동일 이름의 여러 프로세스가 있을 경우 PID 선택 요청
  • 모호한 이름: 서비스와 프로세스가 동일 이름일 경우 명시적 PID 지정 요구

설치 및 제거

  • 단일 정적 Linux 바이너리 형태로 배포
  • 스크립트 설치(권장)
  • 수동 설치
    • 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 권한 필요

성공 기준

  • 사용자가 몇 초 내에 “왜 실행 중인가”를 파악할 수 있을 것
  • 여러 도구를 병행할 필요 없이 단일 출력으로 이해 가능할 것
  • 스트레스 상황에서도 읽기 쉬운 출력 제공
  • 신뢰할 수 있는 결과 제공

AI 보조 개발 명시

  • GitHub Copilot, ChatGPT 등 AI 도구의 도움을 받아 개발되었으며, 인간의 감독 하에 진행

Read Entire Article