InfraAcademy

InfraAcademy Blog

【Linux】プロセスを確認するpsコマンドの使い方解説!オプションなども併せて解説

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、プロセスを確認するpsコマンドの使い方について解説します。プロセスとは、動作中のプログラムの処理の単位のことです。

Linuxでプロセスを確認する方法は、psコマンドを使用します。結論から言うと、ps aux と入力すれば、実行中のプロセスを一覧で確認できます。

この記事では、psコマンドの基本的な使い方やオプションに加えて、出力される列の見方や ps auxps -ef の違いまで詳しく解説します。LPICなどの資格試験で問われるポイントにも触れるので、ぜひ最後までご覧ください。

psコマンドとは?プロセスを確認する基本コマンド

プロセスってどうやって確認すればいいの?と悩んだことはありませんか。Linuxの勉強を始めたばかりの方が、最初につまずきやすいポイントですよね。

psコマンドとは、現在実行されているプロセスの状態を表示するコマンドです。process statusの略で、その名の通りプロセスの状態を確認できます。

そもそもプロセスとは?

そもそもプロセスとは、動作中のプログラムの処理の単位のことです。WebサーバーのnginxやデータベースのMySQLも、Linux上ではそれぞれ1つのプロセスとして動いています。

それぞれのプロセスには、PIDと呼ばれる管理番号が割り当てられています。Linuxはこの番号を使って、同時に動くたくさんのプロセスを整理しながら管理しています。

ちなみに、システムの起動時に最初に動くプロセスにはPID 1が割り当てられます。私たちが起動するプロセスも、親をたどっていくとこのPID 1に行き着きます。

psコマンドはどんな場面で使う?

psコマンドは、サーバーの様子がおかしいときにまず打つコマンドです。

たとえば、サーバーが重いときにCPUを大量に消費しているプロセスを探したり、Webサーバーがきちんと起動しているか確かめたりできます。インフラエンジニアが毎日のように使う、基本中の基本のコマンドと言えます。

では、実際にpsコマンドを使ってみましょう!

psコマンドの基本的な使い方

まずは、psコマンドの一番よく使われる形から見ていきます。

ps auxでプロセスを確認する

では早速psコマンドを使ってみましょう。Linuxを起動して以下のようにコマンドを入力します。

ps aux

psコマンドを実行すると、実行中のプロセスが表示されます。

psコマンドの使い方

プロセスごとにCPUの使用率やメモリの使用率が表示されます。psコマンドでは、現在実行されているプロセスが表示されます。

auxの内訳は、aが他のユーザーのプロセスも含める、uがユーザー名などの詳細情報を加える、xが端末を持たないプロセスも含めるという意味です。3つを組み合わせることで、システム全体のプロセスを詳しく一覧表示できます。

ちなみに、オプションを付けずに ps だけで実行すると、自分の端末から起動したプロセスしか表示されません。裏側で動いているデーモンなどは出てこないため、全体を見たいときはps auxが定番です。

psコマンドのオプション一覧

次にpsコマンドのオプションを解説します。psコマンドの主なオプションは以下の通りです。

オプション 意味
a 他のユーザーのプロセスも表示
u ユーザー名も表示する
x ttyなしのプロセスも表示する
f 親子関係をツリー状に表示する
-e 全てのプロセスを表示する
-f 完全なフォーマットで詳しく表示する
-l 詳細な情報を表示する
-p PID 指定したPIDのプロセスのみ表示する
-C プロセス名 指定した名前のプロセスのみ表示する
-o 項目名 表示する項目を自分で指定する
--sort 項目名 指定した項目で並び替える

psコマンドはハイフンを付けるオプションと付けないオプションがあるので注意しましょう!同じ文字でも、ハイフンの有無によって意味が変わる場合があります。

なぜ2種類の書き方があるのかは、後ほどps auxとps -efの違いのセクションで詳しく解説します。

ps auxの出力の見方

ps auxを実行してみたものの、並んでいる項目の意味が分からないという方も多いのではないでしょうか。ここでは、出力される列の意味を整理します。

まずは、各列の意味を表にまとめました。

列名 意味
USER プロセスを実行しているユーザー
PID プロセスに割り当てられた識別番号
%CPU CPUの使用率
%MEM メモリの使用率
VSZ 確保している仮想メモリのサイズ
RSS 実際に使用している物理メモリのサイズ
TTY プロセスが接続している端末
STAT プロセスの状態
START プロセスが開始した時刻
TIME CPUを使用した合計時間
COMMAND 実行されているコマンド

この中で特に重要なのは、PIDと%CPUと%MEMの3つです。PIDはプロセスを終了させるときに指定する番号で、%CPUと%MEMはサーバーの負荷調査で必ず確認する項目です。

VSZとRSSは、どちらもメモリに関する項目です。VSZが確保している領域の大きさで、RSSが実際に物理メモリへ載っている量と覚えておきましょう。

STAT列でプロセスの状態が分かる

STAT列には、プロセスの状態がアルファベットで表示されます。主な状態コードは以下の通りです。

コード プロセスの状態
R 実行中または実行待ち
S 割り込み可能なスリープ状態
D 割り込みできないスリープ状態
T 停止中
Z ゾンビプロセス

通常、ほとんどのプロセスはSの状態で待機しています。Dの状態が長く続くプロセスはディスクの入出力待ちで固まっている可能性があるため、負荷調査のヒントになります。

Zと表示されるゾンビプロセスについては、記事の後半のよくある疑問で詳しく解説します。

ps auxとps -efの違い

psコマンドを調べていると、ps auxとps -efという2つの書き方を見かけますよね。どちらを使えばいいのか、迷ったことはありませんか。

結論から言うと、どちらもシステム全体のプロセスを表示するコマンドです。違いは、オプションの形式と表示される項目にあります。

psコマンドには、ハイフンを付けないBSD形式と、ハイフンを付けるUNIX形式という2つの流儀が存在します。psコマンドが複数のUNIX系OSの文化を受け継いできた歴史があるため、どちらの書き方も現在まで使えるようになっています。

2つの違いを表で整理しておきます。

比較項目 ps aux ps -ef
オプションの形式 BSD形式(ハイフンなし) UNIX形式(ハイフンあり)
CPU・メモリの使用率 表示される 表示されない
親プロセスのPID(PPID) 表示されない 表示される
向いている用途 リソースの負荷調査 プロセスの親子関係の確認

ps -efを実行すると、たとえば次のように表示されます。

UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 10:00 ?        00:00:02 /sbin/init
root         520       1  0 10:00 ?        00:00:00 /usr/sbin/sshd -D

PPIDの列には、そのプロセスを起動した親プロセスのPIDが表示されます。この例では、sshdはPID 1のinitから起動されたことが読み取れますね。

使い分けの目安は、CPUやメモリの使用率を調べたいときはps aux、プロセスの親子関係を調べたいときはps -efです。まずは両方を打ち比べて、出力の違いを確認してみましょう。

psコマンドの実践的な使い方

基本を押さえたところで、実務でよく使う応用例を紹介します。どれも現場で頻繁に登場する形なので、ぜひ手を動かしながら読んでみてください。

grepと組み合わせて特定のプロセスを探す

実務で最もよく使うのが、grepコマンドと組み合わせて絞り込む方法です。ps auxの出力は行数が多いため、目的のプロセスだけを抜き出します。

たとえば、Webサーバーのnginxが動いているか確認する場合は次の通りです。

ps aux | grep nginx

パイプでpsの出力をgrepへ渡すことで、nginxを含む行だけが表示されます。該当する行が表示されれば、nginxが起動していると確認できるわけです。

1つ注意したいのは、検索に使ったgrep自身も結果に表示される点です。邪魔な場合は ps aux | grep [n]ginx のように書くと、grep自身の行を除外できます。

動作確認用のプロセスが欲しいときは、sleepコマンドをバックグラウンドで動かして探す練習がおすすめです。sleepコマンドについては、プロセスを一定時間停止させるsleepコマンドの使い方で解説しています。

CPUやメモリの使用率順に並び替える

サーバーが重いとき、原因のプロセスを素早く見つけたいですよね。そんなときは、--sortオプションで並び替えると一目で分かります。

ps aux --sort=-%cpu | head

このコマンドで、CPU使用率の高い順に先頭のプロセスだけを表示できます。メモリ使用率の高い順にしたい場合は、--sort=-%mem に変えるだけです。

パイプの後ろに付けたheadは、出力の先頭部分だけを表示するコマンドです。詳しくはファイルの先頭を表示するheadコマンドの使い方をご覧ください。

親子関係をツリー表示で確認する

プロセスの親子関係を視覚的に見たいときは、ps auxf のようにfオプションを追加します。UNIX形式の場合は、ps -ef --forest で同じようにツリー表示が可能です。

どのプロセスがどのプロセスから起動されたのかが枝分かれで表示されます。プロセスの全体構造を把握したいときに重宝する書き方です。

プロセスの監視や終了に使う関連コマンド

psコマンドは、実行した瞬間のプロセスの状態を写真のように切り取るコマンドです。ここでは、psコマンドとセットで使うことの多い関連コマンドを紹介します。

topコマンドでリアルタイムに監視する

実行中のプロセスを継続的に監視するには、topコマンドを使います。ターミナルで top と入力すると、画面が切り替わり、実行中のプロセスを監視することができます。

表示は数秒ごとに自動で更新されるため、負荷の変化を追いかけるのに便利です。psが一瞬を切り取る写真なら、topは動き続ける映像のようなイメージですね。

topコマンドの詳しい使い方についてはこちらの記事を参考にしてください。

Linuxのメモリ使用率を確認する方法は?【top/free/psコマンドの使い方解説】

killコマンドでプロセスを終了する

psコマンドで問題のあるプロセスを見つけたら、killコマンドで終了させます。ps auxでPIDを調べて、kill PID番号の形で実行する流れです。

サーバーが重い、psで原因を特定する、killで終了するという一連の流れは、インフラ運用の定番です。killコマンドの詳しい使い方は、killコマンドを使ってプロセスを終了させる方法で解説しています。

このようにプロセスの確認や管理では、psコマンドを中心にtopコマンドやkillコマンドを組み合わせます。用途に応じて使い分けましょう!

psコマンドのよくある疑問

最後に、psコマンドについて初心者の方からよく聞かれる疑問に答えておきます。

ゾンビプロセスとは何ですか?

ゾンビプロセスとは、処理自体は終了しているのに、親プロセスに終了処理をしてもらえないまま残っているプロセスのことです。ps auxのSTAT列にZと表示されていたら、それがゾンビプロセスです。

ゾンビプロセス自体は、CPUやメモリをほとんど消費しません。ただし大量に発生している場合は、親プロセス側の不具合が疑われるため調査が必要です。

なお、ゾンビプロセスはすでに終了しているため、killコマンドを送っても消えません。親プロセスを終了または再起動して、回収してもらう必要があります。

他のユーザーやrootのプロセスも確認できますか?

ps auxやps -efであれば、rootを含む全ユーザーのプロセスを一般ユーザーのまま確認できます。プロセスの一覧を見るだけなら、特別な権限は必要ありません。

ただし、他のユーザーのプロセスを終了するといった操作には、root権限が必要です。権限の切り替えについては、スーパーユーザーに切り替えるsuコマンドの使い方を参考にしてください。

LPICやLinuCの試験ではどこが問われますか?

LPICやLinuCでは、プロセス管理の分野でpsコマンドが出題されます。特にa・u・xと-e・-fといった基本オプションの意味は、正確に覚えておきたいところです。

BSD形式とUNIX形式でハイフンの有無によって意味が変わる点も、ひっかけとして狙われやすいポイントです。ps auxとps -efの両方を実際に打って、出力の違いごと体で覚えてしまいましょう。

pgrepコマンドとの違いは何ですか?

pgrepは、プロセス名からPIDだけを素早く調べられるコマンドです。grepと違って検索した自分自身が結果に混ざらないため、シェルスクリプトの中でよく使われます。

まずはps auxとgrepの組み合わせに慣れるのが先決です。その上で、PIDだけを知りたい場面ではpgrepも試してみてください。

psコマンドなどLinuxのコマンドを勉強するならUdemy

psコマンドなどLinuxのコマンドを勉強するならUdemyがおすすめです。UdemyはITの講座が豊富にあるサイトです。

参考書での勉強が苦手な方にはおすすめです。以下のように、Linuxに関する講座が豊富にあります!

Udemyのおすすめポイントは3つあります。セールのときは1500円前後で購入できて、無料のサンプル講義動画も用意されています。

さらに、気に入らなければ30日間の返金保証もあります。動画で手を動かしながら学びたい方は、ぜひチェックしてみてください。

UdemyでLinuxの講座を探す

プロセスを確認するpsコマンドの使い方まとめ

今回の記事では、プロセスを確認するpsコマンドの使い方について解説しました。

psコマンドは、実行中のプロセスの状態を表示する基本のコマンドでしたね。リソースの負荷調査ならps aux、親子関係の確認ならps -efという使い分けがポイントでした。

grepとの組み合わせや使用率順のソート、topやkillとの連携まで身につければ、サーバーの調査にひと通り対応できます。まずは手元の環境でps auxを実行して、出力の見方から確認してみてください。

このようなインフラエンジニアに必要な知識を当ブログでは紹介しているので、興味のある方は是非ご覧ください。Linuxを基礎から学びたい方はLinux入門講座一覧、ネットワークを学びたい方はネットワーク入門講座一覧、AWSを学びたい方はAWS入門講座一覧をどうぞ。

さらにlinuxについて勉強したい方はこちらの参考書がオススメです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る