psコマンドで覚えておきたい使い方5個

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個以外だとあまり使うことが無い。