Linux
Linuxコマンド

psコマンドを勉強する

はじめに

これまでps -efぐらいしか使っていなかったpsコマンドの使い方を勉強しました。

用途別のお勧めコマンド

1. 全てのプロセスを表示したい

ps auxf |less

# ps auxf |less
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S     1月22   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     1月22   0:17  \_ [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<    1月22   0:00  \_ [kworker/0:0H]
(以下略)

ps -efps auxが有名です。今回両方試してみて、auxオプションの方が表示が自分好みだったので今後はaux派になろうと思いました。fオプションを追加することで、プロセス間の親子関係が表示されるようになります。
全てのプロセスを表示したい時は、結果を見てから何かを見つけたい、追加の調査をしたい、といったケースが多いと思いますので、lessに放り込むことで次の調査を楽にするのが良いと思います。

2. 特定のプロセス情報を表示させたい

ps uf -C [プロセス名]

# ps uf -C zabbix_agentd
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
zabbix   23741  0.0  0.1  82740  1268 ?        S     2月18   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix   23742  0.0  0.1  82740  1356 ?        S     2月18  18:18  \_ /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix   23743  0.0  0.2  82864  2440 ?        S     2月18   5:01  \_ /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix   23744  0.0  0.2  82864  2440 ?        S     2月18   4:54  \_ /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix   23745  0.0  0.2  82864  2440 ?        S     2月18   4:56  \_ /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix   23746  0.0  0.2  82872  2212 ?        S     2月18   3:00  \_ /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]

-Cオプションをつけることで、プロセス名を指定して情報を出力することができます。aやxオプションを付けると関係のないプロセスまで表示されてしまうので注意。また、このプロセス名は完全一致でないと駄目です。プロセス名の一部しか分かっていない場合(や自分の記憶が怪しい場合)には、ps auxf |grepなどを使うしかないかもしれません。

3. 特定のプロセスが動いているかどうかだけを知りたい

pgrep [プロセス名]

pgrep
# pgrep syslogd
494

# pgrep penguind

おまけです。pgrepは条件にマッチするプロセスのpidを返すコマンドです。この書式では正確には、「特定の文字を含むプロセスが動いているか」になります。動いていればpidが表示されます。上の例ではsyslogd(を含む)プロセスが1つ動いていること、penguind(を含む)プロセスが動いていないことが分かります。プロセス名が分かっていて動いているかどうかだけを知りたい時に使います。
これまではps -ef |grep syslogとやっていましたが、打鍵数が一気に減るのでpgrepで良いと思います。psから外れてしまいましたが、運用では便利そうです。