ps コマンドは、現在動作しているプロセスの一覧を表示するコマンドです。
どのユーザが、どのコマンドを、どれくらいの CPU・メモリを使って動かしているかを確認するときに利用します。
ps 単体ではシンプルな一覧ですが、表示形式や対象プロセスの絞り込みをオプションで細かく制御できます。
障害調査や負荷の高いプロセスの特定、特定アプリケーションのプロセス確認など、サーバ運用では頻繁に登場します。
ps [オプション]ps [オプション] -p PID[,PID...]ps [オプション] -C コマンド名
オプションの組み合わせによって、表示するプロセスの範囲(すべて/特定ユーザのみ/特定 PID のみなど)や、
表示内容(PID・CPU 使用率・メモリ使用量・開始時刻・コマンドラインなど)を柔軟に変えることができます。
Linux では、ps aux や ps -ef が定番の表示形式としてよく使われます。
・自分のプロセスだけを簡易表示する(引数なし)
ps
引数なしの ps は、「現在の端末上で動いている自分のプロセス」を簡易表示します。
手軽に確認できますが、サーバ運用では ps aux や ps -ef を使うことが多いです。
・システム全体のプロセスを BSD 形式で表示する(ps aux)
ps aux
Linux でよく見る形式です。
全ユーザのプロセスを対象に、CPU・メモリ使用率や開始時刻などを含んだ一覧を表示します。
ps aux | head のように、最初の数行だけ確認することも多いです。
・システム全体のプロセスを標準形式で表示する(ps -ef)
ps -ef
-e はすべてのプロセス、-f はフルフォーマット表示です。
親プロセス ID(PPID)や開始時刻、コマンドライン全体などを確認できます。
ps aux とともに、現場でよく見る定番の書き方です。
・特定のユーザが実行しているプロセスだけを表示する(-u)
ps -u apache
apache ユーザが実行しているプロセスだけを表示します。
Web サーバユーザ(apache / www-data / nginx など)やアプリケーションユーザ単位で負荷を確認したいときに便利です。
・特定のユーザ ID のプロセスを表示する(-U)
ps -U appuser -u appuser
-U は実効ユーザ、-u は表示形式の指定です。
このように組み合わせることで、「appuser ユーザのプロセスをユーザ形式で表示する」という指定ができます。
・特定のコマンド名のプロセスだけを表示する(-C)
ps -C httpd
-C コマンド名 で、指定したコマンド名のプロセスだけを表示します。
ps aux | grep httpd の代わりに使えることもあり、grep を重ねるより見やすくなる場合もあります。
・特定の PID のプロセスだけを表示する(-p)
ps -p 1234
-p PID で、指定したプロセス ID の情報だけを表示します。
カンマ区切りで複数指定もでき、ps -p 1234,5678 のように複数プロセスを追いかけることも可能です。
・CPU 使用率の高い順に表示する(–sort)
ps aux --sort=-pcpu | head
–sort で並び順を指定できます。
-pcpu は「CPU 使用率で降順」、-pmem は「メモリ使用率で降順」といった指定です。
上位の数件だけを確認したい場合は head と組み合わせます。
・表示する項目(列)を指定する(-o)
ps -eo pid,ppid,uid,%cpu,%mem,cmd
-o(–format)は、表示する列をカンマ区切りで指定します。
この例では PID・PPID・UID・CPU 使用率・メモリ使用率・コマンドラインだけに絞って表示しています。
ログに残したい項目だけを並べたいときに重宝します。
・ツリー形式でプロセスの親子関係を表示する(–forest)
ps axo pid,ppid,cmd --forest
–forest を付けると、プロセスの親子関係をツリー状に表示します。
どのプロセスがどの子プロセスを生んでいるか、プロセスツリーをざっと把握したいときに便利です。
・スレッド単位で表示する(-L)
ps -L -p 1234 -o pid,tid,cmd
-L を指定すると、LWP(スレッド)単位での情報表示ができます。
特定プロセス ID のスレッド状況を確認したいときに使います。
・実行状態(running)のプロセスだけを表示する(-r)
ps -r -o pid,cmd
-r は、「実行中(running)」状態のプロセスだけを表示します。
CPU を実際に叩いているプロセスをざっと確認したいときに有効です。
・ps と grep を組み合わせて特定プロセスを検索する
ps aux | grep httpd | grep -v grep
定番パターンです。
httpd を含む行だけを抽出し、自分自身の grep コマンド行は除外しています。
より厳密には pgrep などもありますが、現場ではこの形もよく見かけます。
・「サーバが重い」と言われたときの状況確認
まず top や uptime で負荷の高さを確認し、
その後 ps aux --sort=-pcpu や ps aux --sort=-pmem で「どのプロセスが重いのか」を特定していく流れが定番です。
・特定アプリケーションのプロセス数や起動状況の確認
ps -u appuser や ps -C httpd で、アプリケーションやミドルウェアが想定どおりの数だけ起動しているかを確認します。
デプロイ直後のプロセス数やオプション確認にもよく使います。
・ログ調査やデバッグの足がかり
問題が起きている時間帯に、ps -eo pid,ppid,cmd --sort=ppid などでプロセスの親子関係を洗い出し、
どのプロセスがログ出力や CPU 使用の原因になっているかを探るときにも役立ちます。
・スクリプト内でのヘルスチェック
監視スクリプトの中で ps -C プロセス名 や ps -p PID を使い、「プロセスが生きているか」を簡易チェックするパターンもあります。
systemd や監視ツールがある場合でも、追加のヘルスチェックとして組み込むことがあります。
ps はオプションが多く見えますが、ps aux / ps -ef / -u / -p / -C / -o / –sort / –forest あたりを押さえておくだけでも、
日常の運用・障害調査で困る場面はだいぶ減ります。
「まず ps で状況を可視化してから、より詳細なツールに進む」という使い方がオススメです。
| short option | long option | description |
|---|---|---|
| -a | 端末を持つ他ユーザのプロセスも含めて表示する(制御端末のあるプロセスを対象) | |
| -e | --everyone | すべてのプロセスを表示する(-A と同等) |
| -A | --all | すべてのプロセスを表示する(-e と同等) |
| -u | --user | ユーザ形式でプロセス情報を表示する(CPU/メモリ使用率や開始時刻などを含む) |
| -x | 制御端末を持たないプロセスも含めて表示する(デーモンなど) | |
| -f | フルフォーマットで表示する(親 PID やコマンドライン全体など詳細な情報を表示) | |
| -o | --format | 表示する項目(列)を指定する(例: -o pid,ppid,cmd) |
| -p | --pid | 指定した PID のプロセスだけを表示する(カンマ区切りで複数指定可) |
| -U | 指定した実効ユーザのプロセスを表示する | |
| -C | 指定したコマンド名のプロセスを表示する | |
| -L | スレッド情報も含めて表示する(LWP/TID 列など) | |
| -H | プロセス階層をツリー状に表示する | |
| -r | 実行中(running)のプロセスのみを表示する | |
| --sort | 指定したキーでソートして表示する(例: --sort=-pcpu や --sort=pid) | |
| --forest | プロセスの親子関係をツリー表示にする(コマンド行に擬似グラフを付与) | |
| -h | --help | ps コマンドの使い方(ヘルプ)を表示して終了する |
| -V | --version | ps コマンドのバージョン情報を表示して終了する |
ここでは Linux の一般的な ps(procps 系)を前提とし、現場でよく使われる主なオプションだけを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man ps で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
