
2025/12/27 0:20
**Show HN: Witr – あなたのLinuxシステムでプロセスが実行中なのはなぜかを説明するツール** - **概要** Witr はコマンドラインユーティリティで、あるプロセスがまだ生きている正確な理由を教えてくれます。これにより、残存している(またはゾンビ化した)プロセスの診断が容易になります。 - **主な機能** - 親子関係を検出 - 開かれているファイル・ネットワークソケットなど、プロセスを保持しているリソースを特定 - 必要に応じて詳細レベルを選択できる簡潔なサマリー表示 - **使用例** ```bash witr <PID> ``` - **重要性** サーバーが混雑しているときやデバッグ中には、プロセスが意図せずメモリに残ることがあります。Witr を使えば `lsof` や `netstat` 、システムログを調べる手間なく、即座に「なぜ生存しているのか」を把握できます。 - **インストール(Debian/Ubuntu)** ```bash sudo apt-get install witr ``` - **ライセンス**:MIT > *Linux システムを管理しているなら、Witr を試してみてください。すべてのプロセスに「なぜ」がつくようになります。*
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Witr が何をするか:
Witr は軽量で読み取り専用の Linux ユーティリティで、対象(プロセス名、PID、またはポート)を因果関係チェーンに沿って追跡し、「なぜこのプロセスが実行されているのか?」という質問に即座に答えます。出力には対象プロセスの詳細(PID、ユーザー、コマンド、開始時間、再起動回数)、因果チェーン、本質的な監督者(systemd、Docker、PM2、cron、シェルなど)と作業ディレクトリ、git リポジトリ/ブランチ、コンテナ名/イメージ、バインドタイプ等の文脈情報が含まれます。
使い方:
witr <target> を実行するか、PID (--pid <n>) やポート (--port <n>) を指定します。オプションフラグには --short(コンパクト表示)、--tree(図形的ツリー表示)、--json(機械可読出力)、--warnings(組み込み警告の表示)、--no-color、--env(環境変数を含める)があります。単一の位置引数は対象として扱われます。完全な祖先情報や環境データが必要な場合は権限昇格して実行します(例:sudo witr …)。
安全性と設計:
Witr は設定ファイルを必要とせず、バックグラウンドサービスも起動せず、単一画面で決定論的なナarrative‑style 出力を生成します。不確実性は明示的にマークされ、デバッグの助けになります。
警告:
組み込み警告には root で実行していること、パブリックインターフェースへのバインド、過剰な再起動、RSS が 1 GB を超えるメモリ使用量、および稼働時間が 90 日を超えている場合があります。
インストールと移植性:
ワンライナー スクリプト(
curl … | bash)でインストールするか、静的 Linux バイナリ(amd64/arm64)をダウンロードし、必要に応じてチェックサムで検証します。ツールは現在 Linux のみ対応しており、将来のリリースで他 OS を追加する可能性がありますが、保証はありません。
影響:
インシデントレスポンダーは複数のユーティリティを呼び出すことなく、秒単位で迅速かつ明確な回答を得ることでデバッグ時間を短縮できます。企業はより高速なインシデント解決、ダウンタイム低減、および障害時の信頼向上から恩恵を受けます。
本文
witr – なぜこれが動いているのか?
1. 目的
witr は「このプロセスはなぜ動いているのか」という単一の質問に答えるため、プロセスの因果関係を明示的に描き出します。
既存ツール(ps, top, lsof, ss, systemctl, docker ps)は状態を表示するだけで、手作業で相互関連性を結びつける必要があります。witr はその結び付きを一つの読みやすいアウトプットとして提示します。
2. 目標
| 主な目的 | 非対象 |
|---|---|
| プロセスが存在する理由を説明する(単に「存在している」だけではなく) | モニタリングツールではない |
| デバッグ・障害時の理解時間を短縮する | パフォーマンスプロファイラではない |
| 設定不要で動作する | systemd/docker ツールの代替ではない |
| 安全、読み取り専用、破壊的ではない | 自動修復やリメディアションツールではない |
| 完全性よりも明瞭さを優先 |
3. コアコンセプト
witr はすべての対象を「プロセス質問」として扱います。
ポート、サービス、コンテナ、コマンドはすべて PID と結びつきます。PID が判明したら、witr はその存在理由を説明する因果チェーンを構築します。
主に回答する質問:
- 何が動いているのか?
- どのように起動されたのか?
- 何がそれを継続させているのか?
- どんな文脈で属しているのか?
4. 対応対象
| タイプ | 説明 |
|---|---|
| 名前(プロセスまたはサービス) | フラグ無しで位置引数として指定。複数一致の場合、PID の選択を促す。 |
| PID | 特定のプロセスが存在する理由を説明。 |
| ポート | そのポートをリッスンしているプロセスを説明。 |
5. 出力挙動
5.1 原則
- デフォルトでは一画面に収める(可能な限り)。
- 決定的な順序で表示。
- 語り口調の説明。
- 推測が必要な箇所は不確実性を明示。
5.2 セクション
| セクション | 内容 |
|---|---|
| Target | ユーザーが問い合わせた対象。 |
| Process | 実行ファイル、PID、ユーザー、コマンド、開始時刻、再起動回数。 |
| Why It Exists | 因果系統(主価値)。 |
| Source | プロセスを起動・監視した主要システム(systemd unit, docker container, pm2, cron, interactive shell のいずれか)。 |
| Context(best effort) | 作業ディレクトリ、Git リポジトリ名/ブランチ、Docker コンテナ名/イメージ、パブリック vs プライベートバインド。 |
| Warnings | 実行ユーザーが root である、公開インターフェースで待ち受けている、高メモリ使用量、長時間稼働、頻繁な再起動などの非致命的注意点。 |
6. フラグ & オプション
--pid <n> 特定 PID を説明 --port <n> ポート利用を説明 --short 一行でまとめて表示 --tree 完全なプロセス系統木を表示 --json JSON 形式で出力 --warnings 警告のみを表示 --no-color 色付き出力を無効化 --env プロセスの環境変数だけを表示 --help このヘルプメッセージを表示
フラグ無しの単一位置引数は、プロセスまたはサービス名として扱われます。
7. 出力例
7.1 名前ベースクエリ
Target : node Process : node (pid 14233) User : pm2 Command : node index.js Started : 2 days ago (Mon 2025-02-02 11:42:10 +05:30) Restarts : 1 Why It Exists : systemd (pid 1) → pm2 (pid 5034) → node (pid 14233) Source : pm2 Working Dir : /opt/apps/expense-manager Git Repo : expense-manager (main) Listening : 127.0.0.1:5001
7.2 短縮出力
systemd (pid 1) → PM2 v5.3.1: God (pid 1481580) → python (pid 1482060)
7.3 系統木 (witr --pid 1482060 --tree
)
witr --pid 1482060 --treesystemd (pid 1) └─ PM2 v5.3.1: God (pid 1481580) └─ python (pid 1482060)
7.4 複数一致
7.4.1 複数プロセス一致
Multiple matching processes found: [1] PID 12091 node server.js (docker) [2] PID 14233 node index.js (pm2) [3] PID 18801 node worker.js (manual) Re-run with: witr --pid <pid>
7.4.2 名前が曖昧(プロセスとサービス)
Ambiguous target: "nginx" The name matches multiple entities: [1] PID 2311 nginx: master process (service) [2] PID 24891 nginx: worker process (manual) witr cannot determine intent safely. Please re-run with an explicit PID: witr --pid <pid>
8. インストール
8.1 スクリプトインストール(推奨)
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash
スクリプトはアーキテクチャを検出し、最新版バイナリとマニュアルページをダウンロードして
/usr/local/bin/witr にインストールします。
8.2 手動インストール
amd64 用例:
curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/witr-linux-amd64 -o witr-linux-amd64 # optional checksum curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/SHA256SUMS -o SHA256SUMS grep witr-linux-amd64 SHA256SUMS | sha256sum -c - mv witr-linux-amd64 witr && chmod +x witr sudo mv witr /usr/local/bin/witr # optional man page sudo curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/witr.1 -o /usr/local/share/man/man1/witr.1 sudo mandb >/dev/null 2>&1 || true
arm64 用例:
curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/witr-linux-arm64 -o witr-linux-arm64 # optional checksum curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/SHA256SUMS -o SHA256SUMS grep witr-linux-arm64 SHA256SUMS | sha256sum -c - mv witr-linux-arm64 witr && chmod +x witr sudo mv witr /usr/local/bin/witr # optional man page sudo curl -fsSL https://github.com/pranshuparmar/witr/releases/latest/download/witr.1 -o /usr/local/share/man/man1/witr.1 sudo mandb >/dev/null 2>&1 || true
8.3 インストール確認
witr --help
8.4 アンインストール
sudo rm -f /usr/local/bin/witr sudo rm -f /usr/local/share/man/man1/witr.1
9. 対応プラットフォーム
- Linux(amd64, arm64)
9.1 権限に関する注意
witr は
/proc を読み取ります。情報が欠落している場合は権限を上げる必要があります。
sudo witr [arguments]
10. 成功基準
- エンジニアが「なぜこれが動いているのか」と問うた瞬間に数秒で答えられる。
- 複数ツールを使う必要性が減少。
- ストレス下でも出力が理解しやすい。
- インシデント時にユーザーが信頼できる。
11. AI アシスタンスの免責事項
本プロジェクトは GitHub Copilot、ChatGPT 等の LLM を利用して開発され、人間が監督し随時出力を検証しました。