はじめに
システム上で実行されているプロセスやサービスが「なぜ動いているのか」を調べたいことがある。psやtop、lsofなどのコマンドで「何が」動いているかは分かるが、「なぜ」動いているのかという因果関係を把握するのは難しい。
witr(Why is this running?)は、プロセスがどのように起動されたのか、何が起動させているのかを可視化してくれるツールである。
https://github.com/pranshuparmar/witr
今回はこれを使ってみたので、インストールと実際の使い方を備忘録としてまとめておく。
環境
Windows 11 Professional
WSL2 Ubuntu 24.04 LTSインストール
スクリプトインストールを使う。
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bashログ
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 4412k 100 4412k 0 0 8935k 0 --:--:-- --:--:-- --:--:-- 81.7M
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1764 100 1764 0 0 4075 0 --:--:-- --:--:-- --:--:-- 4075
witr installed successfully to /usr/local/bin/witr (version: v0.2.6, os: linux, arch: amd64)
Man page installed to /usr/local/share/man/man1/witr.1witrを使う
基本的な使い方
プロセス名を指定して実行する。
witr nginx次のような情報が表示される。
- プロセスの詳細(PID、ユーザー、コマンド、起動時刻)
- プロセスの起動経路(親プロセスのツリー)
- プロセスの起動元(systemd、docker、pm2など)
- 作業ディレクトリやGitリポジトリ情報
- リスニングポート情報
PIDを指定して調べる
witr --pid 1234特定のPIDのプロセスについて詳細を表示する。
ポート番号から調べる
witr --port 8080指定したポートでリスニングしているプロセスを調べる。
ツリー形式で表示
witr --pid 1234 --treeプロセスの親子関係をツリー形式で表示する。
systemd (pid 1)
└─ init-systemd(Ub (pid 2)
└─ SessionLeader (pid 12345)
└─ bash (pid 12346)
└─ node (pid 1234)
├─ node (pid 1235)
└─ node (pid 1236)オプション
| オプション | 説明 |
|---|---|
| -p, –pid | 指定したPIDのプロセスを調べる |
| -o, –port | 指定したポートでリスニングしているプロセスを調べる |
| -s, –short | プロセスの起動経路のみを表示 |
| -t, –tree | プロセスツリー形式で表示 |
| –env | 環境変数を表示 |
| –exact | 完全一致検索を使用 |
| –json | JSON形式で出力 |
| –no-color | カラー出力を無効化 |
| –verbose | 詳細情報(メモリ、I/O、ファイルディスクリプタ)表示 |
| –warnings | 警告のみ表示 |
witrが出力する情報
- 何が実行されているのか?
- どのように起動されたのか?
- 何がプロセスを維持しているのか?
- プロセスはどのコンテキストに属しているのか?
検出できる起動元
- systemd (Linux)
- launchd (macOS)
- Dockerコンテナ
- Kubernetes
- PM2
- cron
- 対話型シェル
参考
pranshuparmar/witr
https://github.com/pranshuparmar/witr
おわりに
witrは、プロセスの起動要因等を調べるための便利なツールと感じた。
基本的に複数のコマンド(ps、pstree、systemctl、docker psなど)を組み合わせて手動で調べる必要があったが、witrは一発で因果関係を可視化してくれる。
特にトラブルシューティングやデバッグ時に、予期しないプロセスが実行されている理由を把握できる点でよさそうだと思った。
サーバ作業ではいろいろな事情でインストールできないかもしれないが、ローカル環境での調査には役立ちそうだ。