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