新Linux入門|pstreeで見るLinuxのプロセス階層:systemdからの派生関係を理解する

 Linuxシステムの中で、「どのプロセスがどのプロセスを生み出しているの?」と気になったことはありませんか?
そんなときにとっても便利なのが、pstree(Process Tree)コマンド です🌱

 このコマンドを使うと、システム全体のプロセス構造がまるで家系図のようなツリー形式で表示されます。
 特に、Linuxの起動時に最初に実行される systemd(PID=1) からどのように子プロセスが派生していくのかを理解するのに最適です。

🌳 pstreeコマンドの概要

pstree は、「プロセスの親子関係」をツリー形式で表示するコマンドです。
 Linuxシステムの中では、すべてのプロセスが systemd を起点に階層的に派生しており、その構造を一目で把握できます✨

項目内容
コマンド名pstree
主な目的実行中のプロセスの親子関係をツリー形式で表示
使う場面システム全体のプロセス構造の把握、デーモンの起点確認
似ているコマンドps(一覧表示)、top(動的表示)

💬ポイント
 プロセスを単純なリストで確認するpsとは異なり、pstreeは構造的な視点からプロセスのつながりを見られるのが特徴です。

⚙️ コマンド書式

pstree [オプション]

 オプションを組み合わせることで、PIDの表示ユーザー名の表示特定プロセスだけの表示などが可能になります。

🧾 主なオプション

オプション説明
-p各プロセスのPIDを表示する。
-p [PID]指定したプロセスIDを起点としたツリーだけを表示する。
-u各プロセスの所有ユーザー名を表示する。
-aコマンドライン引数も表示する(プロセスの実行内容をより詳しく確認)
-h現在のシェルとその親プロセスを強調表示する。
-nPID順にソートして表示する。
-l長い行を折り返さずに表示する。
-c同じサブツリーを圧縮せずにすべて展開表示する。

💡ポイント
特に -p や -u、-a はよく使われる定番オプションです。
状況に応じて組み合わせると、プロセス構造の理解が一気に深まります。

🖥️ 使用例と出力例

① 基本的なプロセスツリーの表示

[suzuki@AlmaLinux ~]$ pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─sshd─┬─sshd───bash───pstree
        │       └─sshd───bash
        ├─cron
        ├─rsyslogd───2*[{rsyslogd}]
        ├─dbus-daemon
        └─login───bash

💬ポイント
 systemd がルートプロセス(PID=1)であり、そこから sshd, NetworkManager, cron などが枝分かれしているのが確認できます。
「ツリー構造で見ると、Linuxが生きている感じ」が伝わってきますね🌿

② PIDも表示してプロセスを特定(-p)

[suzuki@AlmaLinux ~]$ pstree -p
systemd(1)─┬─NetworkManager(870)─┬─dhclient(1190)
            │                    └─{NetworkManager}(875)
            ├─sshd(1032)─┬─sshd(2021)───bash(2050)───pstree(2108)
            ├─cron(1124)
            ├─rsyslogd(978)───2*[{rsyslogd}(980)]
            └─dbus-daemon(950)

💬ポイント
各プロセスに PID が付いているので、kill コマンドなどで制御したいプロセスを正確に特定できます。

③ 特定のプロセスを起点に表示(-p [PID])

[suzuki@AlmaLinux ~]$ pstree -p 870
NetworkManager(870)─┬─dhclient(1190)
                    └─{NetworkManager}(875)

💬ポイント
ここでは PID 870(NetworkManager)を起点に表示。
pstree -p [PID] は、特定サービスがどんな子プロセスを持っているか調べたいときに最適です。


④ コマンドライン引数も表示(-a)

[suzuki@AlmaLinux ~]$ pstree -a
systemd --switched-root --system --deserialize 23
  ├─NetworkManager --no-daemon
  │   ├─dhclient -d -q -sf /usr/libexec/nm-dhcp-helper
  │   └─2*[{NetworkManager}]
  ├─sshd
  │   └─sshd: suzuki@pts/0
  │       └─bash
  │           └─pstree -a

💬ポイント
-a オプションを使うと、各プロセスがどの引数で実行されているかを確認できます。
システムサービスの設定トラブルを調べるときにも重宝します。

⑤ 所有ユーザーを表示(-u)

[suzuki@AlmaLinux ~]$ pstree -u
systemd─┬─NetworkManager(root)─┬─dhclient(root)
        ├─sshd(root)─┬─sshd(suzuki)───bash(suzuki)───pstree(suzuki)
        ├─cron(root)
        └─dbus-daemon(root)

💬ポイント
誰がどのプロセスを動かしているかがひと目で分かります。
特定ユーザーのプロセスを整理したいときにも便利です。

🧠 systemdから始まるプロセス階層の理解

Linuxの起動プロセスの中で最初に実行されるのが systemd(PID=1) です。
 このsystemdは、ログ管理、ネットワーク、ユーザーセッションなど、あらゆるプロセスの「親」にあたります。

プロセス役割備考
systemd最初に起動するプロセス。全プロセスの親。PID=1
NetworkManagerネットワーク管理デーモンsystemdの子プロセス
sshdSSH接続を管理するデーモンsystemdの子プロセス
bashユーザーが操作するシェルsshd経由で生成される
pstreebashが起動した子プロセス一時的なツールプロセス

💬ポイント
 このように、pstreeを使えば「systemd → sshd → bash → pstree」というプロセスの流れを視覚的に理解できます🌿

🌈 まとめ

  • pstreeコマンド は、Linuxのプロセスの「家系図」を表示するツール。
  • systemd(PID=1) からどのプロセスが生まれているかをツリー構造で直感的に理解できる。
  • -p, -a, -u オプションを活用すると、より詳細にプロセス関係を分析できる。

Linuxの世界では、プロセスの流れを掴むことがトラブル解決の第一歩です💪
pstreeを使いこなして、「プロセスのつながり」を可視化しましょう! 🌿