MENU

動いているプロセスの親子関係をツリー形式で素早く把握する手順

目次

まず結論:pstreeで親子関係をひと目で把握できる

稼働中のプロセス構造を確認したいなら、pstreeコマンドが最速です。引数なしで実行するだけで、systemdを頂点とした全プロセスの階層が一覧できます。

pstree

現在作業中のシェルとその祖先プロセスをハイライト表示したい場合は -h オプションを付けます。

pstree -h

PIDも一緒に確認したい場合は -p を追加します。

pstree -p

psコマンドより見やすい理由

ps auxps -ef は全プロセスを一覧できますが、親子関係が視覚的にわかりません。どのデーモンがどのワーカープロセスを生んでいるか、どのシェルから実行されたスクリプトなのか――そういった”文脈”を把握するには pstree が圧倒的に読みやすいです。

サービスが起動しているはずなのに見当たらない、あるいは想定外のプロセスが残っているといった場面で、pstree を使うと原因の絞り込みが格段に速くなります。

よく使うオプションと組み合わせ

-h:現在のシェルの祖先をハイライト

pstree -h

今自分がいるプロセス(bashzsh)とその親プロセスをハイライト表示します。「自分の作業がどのデーモンやサービスから派生しているか」を確認するのに便利です。ターミナルエミュレータによってはハイライトが効かない場合があります。その際は -H <PID> で任意のPIDを直接指定できます。

-p:PID付き表示

pstree -p

プロセス名の横にPIDが表示されます。killsystemctl で操作する際に必要なPIDをすぐ特定できます。

-u:ユーザー名付き表示

pstree -u

実行ユーザーが変わるポイントでユーザー名が挿入されます。root から www-data へ権限が切り替わる境界を確認する際に役立ちます。

-a:起動引数も表示

pstree -a

プロセス名だけでなく起動時の引数も表示されます。同名のデーモンが複数起動している場合に、引数で区別するのに有効です。

実用的な組み合わせ例

pstree -puh

PID・ユーザー・ハイライトを同時に有効にした組み合わせです。運用現場では日常的に使われるパターンです。

systemd環境での見方

現在主流のLinuxディストリビューション(Ubuntu 22.04/24.04、AlmaLinux 9、Debian 12、RHEL 9など)ではPID 1は systemd です。旧来のSysVinit環境で init がPID 1だった時代とは構造が異なります。

$ pstree -p | head -20
systemd(1)─┬─ModemManager(892)
            ├─NetworkManager(934)─┬─{NetworkManager}(956)
            │                     └─{NetworkManager}(957)
            ├─sshd(1124)───sshd(3210)───sshd(3215)───bash(3216)───pstree(4102)
            ├─nginx(1350)─┬─nginx(1351)
            │              └─nginx(1352)
            └─...

sshd 配下にSSHセッションの bash が、そのまた下に実行中のコマンドが連なっている様子が確認できます。systemd 直下にサービスのデーモンが並ぶ構造を頭に入れておくと、起動・停止状態の視覚的な確認がしやすくなります。

実務で役立つ場面

ゾンビプロセスの親を特定する

ゾンビプロセス(状態が Z)が発生した際、pstree -p でどの親プロセスが wait() を呼ばずに放置しているかを把握できます。ゾンビは親プロセスが回収するまで残り続けるため、親の特定が解決の糸口になります。

# ゾンビプロセスのPIDを確認する
ps aux | awk '$8 == "Z" {print $2, $11}'

# そのPIDの祖先だけをたどって表示する(-s は --show-parents)
pstree -p -s <ゾンビのPID>

-s オプションは指定したPIDからルートに向かって祖先プロセスだけを表示します。数百プロセスが動くサーバーで特定プロセスの文脈だけを絞り込む際に重宝します。

デプロイ後のワーカー数を確認する

WebアプリのデプロイやリロードのあとにGunicorn・PHP-FPM・Unicornなどのワーカープロセスが正しい数で起動しているかを確認したいケースは多いです。grep と組み合わせて特定サービス配下だけを絞り込めます。

pstree -p | grep -A20 gunicorn

特定ユーザーのプロセスだけ確認する

# deploy ユーザーのプロセスツリーだけを表示する
pstree -p deploy

ユーザー名を引数に渡すと、そのユーザーが所有するプロセスのツリーだけを表示します。複数ユーザーが稼働中のサーバーで特定ユーザーの作業状況を素早く把握できます。

インストールされていない場合の対処

最小構成のコンテナや一部の軽量ディストリビューションでは pstree がデフォルトで含まれていない場合があります。pstreepsmisc パッケージに収録されており、以下でインストールできます。

# Debian / Ubuntu 系
sudo apt install psmisc

# RHEL / AlmaLinux / Rocky Linux 系
sudo dnf install psmisc

コンテナ環境でパッケージをインストールできない場合は ps -ef --forest が代替になります。ただし視認性は pstree に及ばないため、調査作業が長引く傾向があります。ホスト側に入って確認できる状況であれば pstree を使うほうが効率的です。

<PR>この記事に関連するおすすめ書籍

新しいシェルプログラミングの教科書

現場で使えるシェルスクリプトの書き方を基礎から実務レベルまで解説。定型作業の自動化に役立ちます。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次