Linuxでプロセスと子プロセスを詳細に確認する方法 – htop, top, pstree以外のコマンドも紹介!

この記事は約16分で読めます。

Linuxシステム管理者にとって、現在実行中のプロセスとその子プロセス、プログラムの引数などを詳細に確認することは重要なタスクです。htop、top、pstreeは広く知られたツールですが、他にも便利なコマンドがあります。この記事では、プロセスの詳細情報を見やすく表示するためのコマンドを紹介します。

htop コマンド

htopは、インタラクティブなプロセスビューアで、システムのリアルタイムな状態を表示します。プロセスのCPU使用率、メモリ使用量、実行時間などの情報を色分けされた見やすいインターフェースで提供します。また、htopを使用してプロセスの優先度を変更したり、プロセスを終了させたりすることもできます。

$ htop
  1  [||||||||||||||||||||||||||||||||||||||||||||||||||  95.0%]   Tasks: 95, 361 thr; 1 running
  2  [|||||||||||||||||||||||||||||||||||||||||||||||||||  96.3%]   Load average: 1.86 2.10 1.93 
  Mem[|||||||||||||||||||||||||||||||||||||||||||||  3.72G/5.77G]   Uptime: 8 days, 02:58:41
  Swp[                                                    0K/0K]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 2673 user1      20   0 3404M  855M  3664 S  7.9 14.4  7h12:53 /usr/bin/gnome-shell
 4741 user1      20   0 2846M  529M  1872 S  5.7  8.9  4h37:01 /usr/bin/gnome-shell
 5386 user1      20   0 2223M  278M  1588 S  2.6  4.7  1h40:58 /usr/bin/gnome-shell
  534 root       20   0  415M 61100  7080 S  2.3  1.0  3h06:36 /usr/lib/snapd/snapd
 1641 user1      20   0 2547M  263M 18052 S  2.0  4.4  1h54:45 /usr/bin/nautilus --gapplication-service
 6675 user1      20   0 1299M  158M  4524 S  1.7  2.7  1h03:16 /usr/bin/gnome-software --gapplication-service
 6837 user1      20   0  807M  110M  4752 S  1.7  1.9  1h01:38 /usr/bin/gnome-terminal-server
 1272 user1      20   0 3126M  298M  5368 S  1.3  5.0  1h38:59 /usr/bin/code
12196 user1      20   0  668M 53936  4752 S  1.0  0.9  0h28:29 /usr/bin/gnome-terminal-server
 3252 user1      20   0 1706M  262M  4852 S  1.0  4.4  0h31:42 /usr/lib/firefox/firefox
  101 root      -51   0     0     0     0 S  0.3  0.0  0h38:14 irq/29-AMD-Vi
  104 root       20   0     0     0     0 S  0.3  0.0  0h25:55 [kworker/2:1-events]

 

top コマンド

topコマンドは、システムのリアルタイムなプロセス情報を表示します。デフォルトでは、CPU使用率の高い順にプロセスが表示されます。トップ画面では、システム全体のCPU使用率、メモリ使用量、実行中のプロセス数などの概要情報も確認できます。

$ top
top - 15:00:01 up 8 days,  3:00,  1 user,  load average: 1.59, 1.91, 1.89
Tasks: 303 total,   1 running, 302 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.9 us,  2.0 sy,  0.0 ni, 91.7 id,  0.3 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :   5944.2 total,    612.8 free,   3715.6 used,   1615.8 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1919.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   2673 user1     20   0 3404640 875244   3664 S   7.9  14.4   7:12.96 gnome-shell
   4741 user1     20   0 2846232 529780   1872 S   5.7   8.7   4:37.06 gnome-shell
   5386 user1     20   0 2223360 279028   1588 S   2.6   4.6   1:41.02 gnome-shell
    534 root      20   0  415844  61100   7080 S   2.3   1.0   3:06.60 snapd
   1641 user1     20   0 2547196 263560  18052 S   2.0   4.3   1:54.77 nautilus
   6675 user1     20   0 1299792 158864   4524 S   1.7   2.6   1:03.27 gnome-software
   6837 user1     20   0  807912 110864   4752 S   1.7   1.8   1:01.65 gnome-terminal-+
   1272 user1     20   0 3126784 298052   5368 S   1.3   4.9   1:39.02 code
  12196 user1     20   0  668756  53936   4752 S   1.0   0.9   0:28.48 gnome-terminal-+
   3252 user1     20   0 1706240 262144   4852 S   1.0   4.3   0:31.70 firefox

pstree コマンド

pstreeコマンドは、プロセスの親子関係をツリー形式で表示します。デフォルトでは、システム上で実行されているすべてのプロセスが表示されます。オプションを使用することで、特定のプロセスやプロセスグループを表示したり、プロセスIDやプロセスの引数を表示したりすることもできます。

  • pstree -a – プロセスツリーを表示し、各プロセスの引数も表示します。
  • pstree -p – プロセスツリーを表示し、各プロセスのPIDを表示します。
$ pstree -a
systemd
  ├─ModemManager --filter-policy=strict
  ├─NetworkManager --no-daemon
  ├─accounts-daemon
  ├─acpid
  ├─avahi-daemon: running [ubuntu-desktop.local]
  ├─cron -f
  ├─cupsd -l
  ├─dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
  ├─dockerd -H fd:// --containerd=/run/containerd/containerd.sock
  │   └─docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
  │       └─docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/f1c6c4e0da6f6b0b3fce283c868d9df9e45d04cc4b52742c639267e8f3c3f397 -address /var/run/docker/libcontainerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
  │           └─mysqld
$ pstree -p
systemd(1)─┬─ModemManager(891)─┬─{ModemManager}(906)
           │                   └─{ModemManager}(908)
           ├─NetworkManager(887)─┬─{NetworkManager}(907)
           │                     └─{NetworkManager}(917)
           ├─accounts-daemon(874)─┬─{accounts-daemon}(880)
           │                      └─{accounts-daemon}(886)
           ├─acpid(884)
           ├─atd(1004)
           ├─avahi-daemon(872)───avahi-daemon(905)
           ├─cron(883)
           ├─cupsd(6529)
           ├─dbus-daemon(868)

ps コマンド

psコマンドは、プロセスに関する情報を表示するための強力なツールです。以下のオプションを使用すると、プロセスの階層構造や詳細情報を確認できます。

  • ps auxf – プロセスをツリー形式で表示し、ユーザー名、PID、CPU使用率、メモリ使用率、実行時間、コマンドラインなどの詳細情報を表示します。
  • ps -ejH – プロセスをツリー形式で表示し、PID、PPID、ユーザー名、開始時間、コマンドラインなどの情報を表示します。
$ ps auxf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 225400  9736 ?        Ss   Apr08   0:03 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    Apr08   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   Apr08   0:00  \_ [rcu_gp]
root         4  0.0  0.0      0     0 ?        I<   Apr08   0:00  \_ [rcu_par_gp]
root         6  0.0  0.0      0     0 ?        I<   Apr08   0:00  \_ [kworker/0:0H-kblockd]
root         8  0.0  0.0      0     0 ?        I<   Apr08   0:00  \_ [mm_percpu_wq]
root         9  0.0  0.0      0     0 ?        S    Apr08   0:01  \_ [ksoftirqd/0]
root        10  0.0  0.0      0     0 ?        I    Apr08   0:08  \_ [rcu_sched]
$ ps -ejH
    PID    PPID PGID     SID TTY     TPGID STAT   UID   TIME COMMAND
      1       0    1       1 ?           -1 Ss       0   0:03 /sbin/init splash
      2       0    0       0 ?           -1 S        0   0:00  \_ [kthreadd]
      3       2    0       0 ?           -1 I<       0   0:00      \_ [rcu_gp]
      4       2    0       0 ?           -1 I<       0   0:00      \_ [rcu_par_gp]
      6       2    0       0 ?           -1 I<       0   0:00      \_ [kworker/0:0H-kblockd]
      8       2    0       0 ?           -1 I<       0   0:00      \_ [mm_percpu_wq]
      9       2    0       0 ?           -1 S        0   0:01      \_ [ksoftirqd/0]
     10       2    0       0 ?           -1 I        0   0:08      \_ [rcu_sched]

lsof コマンド

lsofコマンドは、プロセスが開いているファイル、ソケット、パイプなどの情報を表示します。以下のオプションを使用すると、特定のプロセスに関連するファイルを確認できます。

  • lsof -c <プロセス名> – 指定したプロセス名に関連するオープンファイル、ソケット、パイプなどを表示します。
  • lsof -p <PID> – 指定したPIDに関連するオープンファイル、ソケット、パイプなどを表示します。
$ lsof -c ssh
COMMAND   PID USER   FD      TYPE DEVICE  SIZE/OFF     NODE NAME
sshd     1234 root  cwd       DIR   0,32      4096        2 /
sshd     1234 root  rtd       DIR   0,32      4096        2 /
sshd     1234 root  txt       REG   0,32    852856 50594843 /usr/sbin/sshd
sshd     1234 root  mem       REG   0,32 100977018  1840399 /usr/lib/locale/locale-archive
sshd     1234 root  mem       REG   0,32   2156592    15950 /usr/lib/x86_64-linux-gnu/libc-2.31.so
$ lsof -p 1234
COMMAND  PID USER   FD      TYPE DEVICE  SIZE/OFF     NODE NAME
sshd    1234 root  cwd       DIR   0,32      4096        2 /
sshd    1234 root  rtd       DIR   0,32      4096        2 /
sshd    1234 root  txt       REG   0,32    852856 50594843 /usr/sbin/sshd
sshd    1234 root  mem       REG   0,32 100977018  1840399 /usr/lib/locale/locale-archive
sshd    1234 root  mem       REG   0,32   2156592    15950 /usr/lib/x86_64-linux-gnu/libc-2.31.so

proc ファイルシステム

Linuxの/procファイルシステムは、実行中のプロセスに関する詳細情報を提供します。以下のファイルを確認することで、プロセスのコマンドラインやステータス情報を取得できます。

  • /proc/<PID>/cmdline – 指定したPIDのプロセスの完全なコマンドラインを表示します。
  • /proc/<PID>/status – 指定したPIDのプロセスのステータス情報を表示します。
$ cat /proc/1234/cmdline
/usr/sbin/sshd
$ cat /proc/1234/status
Name:   sshd
Umask:  0022
State:  S (sleeping)
Tgid:   1234
Ngid:   0
Pid:    1234
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups: 
NStgid: 1234
NSpid:  1234
NSpgid: 1234
NSsid:  1234
VmPeak:   159784 kB
VmSize:   159784 kB

GREPとの組み合わせ

上記のコマンドの出力結果をグレップと組み合わせることで、目的の情報をより効率的に見つけることができます。例えば、特定のユーザーが実行しているプロセスを検索する場合は、以下のように実行します。

$ ps auxf | grep user_name
user_name  1234  0.0  0.0  14224  1864 ?        Ss   May01   0:00          \_ sshd: user_name@pts/0
user_name  1345  0.0  0.0   6076  3452 pts/0    Ss   00:10   0:00              \_ -bash
user_name  2345  0.0  0.0   9360  3452 pts/0    R+   00:25   0:00                  \_ ps auxf

これらのコマンドを使いこなすことで、Linuxシステム上で実行中のプロセスとその子プロセス、プログラムの引数などを詳細かつ見やすく確認できます。システム管理者は、これらのツールを活用してシステムのパフォーマンスを監視し、問題の原因を特定することができるでしょう。

タイトルとURLをコピーしました