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