psコマンドでプロセスを確認する方法|auxと-efの違いやgrep検索もコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドP-T, プロセス管理コマンド > psコマンドでプロセスを確認する方法|auxと-efの違いやgrep検索もコマンド
「Webサーバーが落ちたかもしれないから、プロセスが動いているか確認したい」
「サーバーが重いので、CPUやメモリを食い潰している原因のプログラムを特定したい」
Linuxサーバーを運用していると、システム内で現在どんなプログラム(プロセス)が動いているのかを確認する場面に必ず直面します。

この記事では、現在実行中のプロセスを表示する ps コマンド の使い方を解説します。
現場のエンジニアが必ず使う2つの定番オプション(aux-ef)の違いから、grep コマンドと組み合わせて特定のプロセスだけを抽出する実務テクニックまで、トラブル対応で絶対に役立つノウハウをまとめました。

【この記事でわかること】 ・psコマンドの2大定番オプション(aux と -ef)の違いと使い分け
・CPU / メモリ使用率からプロセスを特定する実務テクニック
・grepと組み合わせて特定プロセスだけ抽出する方法(grep -v grepの罠)
・プロセスの親子関係を追う -ef / --forest の読み方
・cgroups時代のプロセス確認(systemctl status / systemd-cgls)

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

※本記事はsystemd前提のディストリビューション(RHEL系9系、Ubuntu 22.04 / 24.04 LTS など)で動作確認しています。プロセスをサービス単位で見たい場合はsystemctl statussystemd-cglsと組み合わせると便利です。

1. 現場で使うpsコマンドの「2大巨頭」

ps コマンドには非常に多くのオプションがありますが、実務で使うのは実質的に以下の2パターンだけです。この2つさえ覚えておけば現場で困ることはありません。

パターンA: ps aux (BSD系オプション)

Linux界隈で最もポピュラーな組み合わせです。システム上で動いている「すべてのユーザー」の「すべてのプロセス」を、CPUやメモリの使用率も含めて詳細に表示します。(※ハイフンは付けません)

# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 123456 4567 ? Ss 10:00 0:05 /usr/lib/systemd/systemd apache 12345 0.1 1.5 543210 34567 ? S 10:15 0:01 /usr/sbin/httpd -DFOREGROUND

PID: プロセスID(プログラムを強制終了させる kill コマンドを使う時に必要)
%CPU / %MEM: CPUとメモリの使用率
COMMAND: 実行されているコマンド名

パターンB: ps -ef (System V系オプション)

もう一つの定番が -ef です。こちらもすべてのプロセスを表示しますが、親プロセス(PPID)の情報が表示されるため、プロセスの親子関係を調べたい時によく使われます。

# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:00 ? 00:00:05 /usr/lib/systemd/systemd apache 12345 12344 0 10:15 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND

PPID: 親プロセスのID

【結論】どちらを使うべきか?

CPUやメモリの使用率も見たいなら ps aux を、プロセスの親子関係(誰がどのプログラムを起動したか)を追いたいなら ps -ef を使うのが現場のセオリーです。

2. grepと組み合わせて特定のプロセスを探す(必須テクニック)

ps aux をそのまま実行すると、何百行ものプロセスが画面を埋め尽くしてしまい、目当てのプログラムを見つけることができません。
パイプ(|)を使って grep コマンドに渡し、特定のプロセスだけを抽出するのが実務での基本動作です。

Webサーバー(nginx)が動いているか確認する

# ps aux | grep nginx root 1234 0.0 0.0 56789 1234 ? Ss 10:00 0:00 nginx: master process nginx 1235 0.0 0.1 56800 2345 ? S 10:00 0:00 nginx: worker process root 9999 0.0 0.0 112233 999 pts/0 S+ 11:00 0:00 grep --color=auto nginx

【小技】grep自身のプロセスを除外する(grep -v grep)

上記の実行結果を見ると、一番下に grep nginx という検索コマンド自体のプロセスも混ざって表示されてしまいます。
これを消して純粋な目的のプロセスだけを表示するには、さらにパイプを繋いで grep -v grep(grepという文字列を除外する)を追加します。

# ps aux | grep nginx | grep -v grep root 1234 0.0 0.0 56789 1234 ? Ss 10:00 0:00 nginx: master process nginx 1235 0.0 0.1 56800 2345 ? S 10:00 0:00 nginx: worker process

PIDだけをすばやく取得する(pgrep)

「プロセスが動いているかだけ確認したい」「PIDだけ取り出して kill に渡したい」という場合は、pgrep(プロセスグレップ)コマンドが便利です。ps aux | grep xxx | grep -v grep という長いパイプを1コマンドで代替できます。

# nginx のPIDだけを表示する # pgrep nginx 1234 1235 # PIDを使ってプロセスを停止する場合 # kill 1234

3. CPUやメモリを大量に消費しているプロセスを特定する

「サーバーが重い!」というアラートが鳴った時、どのプロセスが悪さをしているのかを一瞬で見つけ出すオプションです。

メモリ使用量(%MEM)が多い順に並び替える

--sort オプションを使います。マイナス記号(-)をつけると大きい順(降順)になります。

# ps aux --sort -%mem

上位数件だけ見たい場合は head コマンドを繋ぎます。

# ps aux --sort -%mem | head -n 5

CPU使用率(%CPU)が多い順に並び替える

# ps aux --sort -%cpu | head -n 5

cgroups時代のプロセス確認(systemd-cgls / systemctl status)

現代のLinux(systemd採用ディストリビューション)では、プロセスはcgroups(コントロールグループ)によってサービス単位でグループ化されています。psコマンドで個別プロセスを見るのと並行して、サービス単位で「どのプロセスがどのユニットに属しているか」を見るのも実務では非常に有効です。

# 全サービスのプロセスツリーを表示 $ systemd-cgls # 特定サービスに属するプロセスだけ表示 $ systemctl status httpd # psコマンドにcgroup列を追加して表示(forest表示と組み合わせると親子関係も追える) $ ps -e -o pid,user,cgroup,cmd --forest | head -30

こうしたsystemd時代の見方を組み合わせると、「Apacheの子プロセスが想定より多い」「systemdから見て孤立しているプロセスがある」といった調査がぐっと楽になります。

本記事のまとめ

やりたいこと コマンド
すべてのプロセスを詳細に表示(リソース確認) ps aux
すべてのプロセスを詳細に表示(親子関係確認) ps -ef
特定のプロセス(例: nginx)が動いているか探す ps aux | grep nginx
grep自身を除外してプロセスを表示する ps aux | grep nginx | grep -v grep
プロセスのPIDだけをすばやく取得する pgrep nginx
メモリ使用量が多い順に並び替える ps aux --sort -%mem | head -n 5
CPU使用率が高い順に並び替える ps aux --sort -%cpu | head -n 5

psコマンドで問題のプロセスを素早く特定できていますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。