Linuxでプロセス状態を取得するコマンドといえばpsコマンドだが、今回はこのコマンドで個人的に覚えておきたいオプション等についてをまとめてみる事にする。
1.基本的な使い方(現在動作中のプロセスを全て出力する)
psコマンドは、基本的に現在動作中のプロセスを出力するためのコマンドだ。
で、現在システムで動作しているプロセスを全て出力する場合は、「-ef」で指定出来る。
以下、オプションの詳細。
- -e … 全てのプロセスを出力する
- -f … 完全なフォーマットで出力する
このオプションでpsコマンドを実行した場合、以下のような出力が得られる。
[root@test-node ~]# ps -ef | head -10
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2月20 ? 00:03:19 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 2月20 ? 00:00:01 [kthreadd]
root 3 2 0 2月20 ? 00:00:28 [ksoftirqd/0]
root 7 2 0 2月20 ? 00:00:08 [migration/0]
…
各項目の意味を左から順に説明すると
- UID … プロセスの実行ユーザ名
- PID … プロセス番号
- PPID … 親プロセスのプロセス番号
- C … CPU使用率
- STIME … プロセスの開始時間
- TTY … プロセスが動作しているターミナル(?の場合はバックグラウンドプロセス)
- CMD … プロセスのコマンド名
2.ユーザIDを指定する
以下のようにコマンドを実行し、ユーザIDを指定してやることで、そのユーザで実行されているプロセスのみを表示させる。
(-eの方が優先される)
ps -fu ユーザID
[root@test-node ~]# ps -fu dd-agent
UID PID PPID C STIME TTY TIME CMD
dd-agent 15208 1 0 2月21 ? 00:14:57 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/bin/super
dd-agent 15214 15208 0 2月21 ? 01:33:20 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/dog
dd-agent 15215 15208 0 2月21 ? 02:45:40 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/dda
dd-agent 15216 15208 0 2月21 ? 02:06:47 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/age
3.実行コマンドを指定する
「-C」オプションで実行しているコマンドを指定することで、そのコマンドのプロセスのみを表示させる。
(部分一致での抽出は不可)
ps -fC コマンド名
ただ、以下の実行例のように、この機能だと漏れが発生することが多いようだ。
通常はgrepのキーワードの1文字を[]で囲むことで、対象のプロセスのみを取り出してやると良いだろう。
[root@test-node ~]# ps -fC python
UID PID PPID C STIME TTY TIME CMD
dd-agent 15214 15208 0 2月21 ? 01:33:21 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/dog
dd-agent 15215 15208 0 2月21 ? 02:45:43 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/dda
dd-agent 15216 15208 0 2月21 ? 02:06:49 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/age
[root@test-node ~]# ps -ef | grep [p]ython
root 1201 1 0 2月20 ? 00:06:48 /usr/bin/python -Es /usr/sbin/tuned -l -P
dd-agent 15208 1 0 2月21 ? 00:14:57 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/bin/supervisord -c /etc/dd-agent/supervisor.conf
dd-agent 15214 15208 0 2月21 ? 01:33:21 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/dogstatsd.py --use-local-forwarder
dd-agent 15215 15208 0 2月21 ? 02:45:43 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/ddagent.py
dd-agent 15216 15208 0 2月21 ? 02:06:49 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/agent.py foreground --use-local-forwarder
4.プロセスを親子関係でツリー表示する
プロセスの親子関係をツリー表示させる場合は、「f」(ハイフン無し)を付与する事で出力させることが出来る。
ps -ef f
[root@test-node ~]# ps -fu dd-agent f
UID PID PPID C STIME TTY STAT TIME CMD
dd-agent 15208 1 0 2月21 ? Ss 14:58 /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/bin/supervisord -c /etc/dd-agent/
dd-agent 15214 15208 0 2月21 ? Sl 93:23 \_ /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/dogstatsd.py --use-loca
dd-agent 15215 15208 0 2月21 ? S 165:46 \_ /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/ddagent.py
dd-agent 15216 15208 0 2月21 ? S 126:51 \_ /opt/datadog-agent/embedded/bin/python /opt/datadog-agent/agent/agent.py foreground --u
5.CPU/メモリ使用率を出力する
各プロセスのCPU/メモリ使用率を出力する場合は、「u」(ハイフン無し)を付与することで取得出来る。
ps au -C top
[root@localhost ~]# ps au -C top
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 15680 0.0 0.0 115380 2040 pts/0 Ss 16:42 0:00 -bash
root 15759 0.0 0.0 115380 2020 pts/1 Ss 17:27 0:00 -bash
root 15776 0.1 0.0 146136 1928 pts/1 S+ 17:27 0:00 top
root 15787 0.0 0.0 139496 1572 pts/0 R+ 17:27 0:00 ps au -C top
root 23173 0.0 0.0 110028 816 tty1 Ss+ 1月04 0:00 /sbin/agetty --noclear tty1 linux
個人的によく利用するのはこんなものだろうか。
psコマンドは歴史が長く多機能なので、「-o」で出力フォーマットを直接指定できたり、項目ごとにソートさせたりといった事も出来るし、その他色々な機能があるが、個人的には上の5個以外だとあまり使うことが無い。