ps auxコマンドの使い方を完全ガイド!初心者でもわかるLinuxのプロセス管理の基本
生徒
「Linuxで今どんなプログラムが動いているか確認したいんですけど、どうすればいいですか?」
先生
「それならps auxコマンドが便利ですよ。今動いているすべてのプロセスを一覧で見ることができます。」
生徒
「プロセスって何ですか?それとauxって何か意味があるんですか?」
先生
「プロセスは実行中のプログラムのことです。auxはオプションの組み合わせで、詳しい情報を表示するための指定なんです。順番に説明していきますね。」
1. ps auxコマンドとは?
ps auxコマンドは、Linuxシステムで現在実行されているすべてのプロセスを表示するコマンドです。プロセスとは、コンピュータ上で動いているプログラムのことを指します。たとえば、ブラウザを開いているとき、音楽プレイヤーが動いているとき、それぞれが別々のプロセスとして実行されています。
Windowsでいうと「タスクマネージャー」のようなものです。タスクマネージャーでは、どのアプリがどれくらいメモリを使っているか、CPUをどれくらい使っているかが見られますよね。ps auxコマンドも同じように、Linuxで動いているプログラムの状態を確認できます。
psは「process status」の略で、プロセスの状態を表示するという意味です。システムが重いとき、どのプログラムが原因か調べたり、不要なプログラムを見つけて終了させたりするときに使います。
2. ps auxの各オプションの意味
ps auxのauxは、実は三つのオプションが組み合わさったものです。それぞれの意味を見ていきましょう。
- a:すべてのユーザーのプロセスを表示します。自分だけでなく、他のユーザーが実行しているプログラムも含めて表示されます。
- u:ユーザー名や、CPU使用率、メモリ使用率など、詳しい情報を表示します。「user-oriented format」の略です。
- x:ターミナルに関連付けられていないプロセスも表示します。バックグラウンドで動いているプログラムなども含まれます。
これらを組み合わせることで、システム上で動いているすべてのプロセスの詳細情報が見られるようになります。コマンドを実行すると、たくさんの情報が表示されますが、一つ一つ理解していけば大丈夫です。
3. 基本的な使い方
ps auxコマンドは、とてもシンプルに使えます。ターミナルで以下のように入力するだけです。
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 16880 1234 ? Ss 10:00 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 10:00 0:00 [kthreadd]
www-data 456 0.5 2.3 456789 23456 ? S 10:05 0:15 /usr/sbin/apache2
user 1234 1.2 3.4 678901 34567 pts/0 Ss 11:30 0:45 /usr/bin/python3
このコマンドを実行すると、上記のように多くの情報が表示されます。最初は圧倒されるかもしれませんが、必要な情報だけを見られるようになれば問題ありません。
表示される項目が多いので、画面に収まりきらないこともあります。そんなときは、lessコマンドと組み合わせて使うと、スクロールしながら見ることができます。
ps aux | less
このように「パイプ」記号の|を使うことで、結果をlessコマンドに渡して、ページ単位で見られるようになります。矢印キーで上下にスクロールでき、qキーを押すと終了します。
4. 表示される項目の見方
ps auxコマンドで表示される各項目の意味を理解しましょう。それぞれの列が何を表しているかわかれば、必要な情報をすぐに見つけられます。
- USER:そのプロセスを実行しているユーザー名です。
rootはシステム管理者、www-dataはウェブサーバー用のユーザーなどです。 - PID:プロセスID番号です。各プロセスに割り振られる固有の番号で、プロセスを特定するときに使います。
- %CPU:そのプロセスがCPUをどれくらい使っているかをパーセントで表示します。数値が大きいほど、CPUを多く使っています。
- %MEM:そのプロセスがメモリ(RAM)をどれくらい使っているかをパーセントで表示します。
- VSZ:仮想メモリのサイズです。キロバイト単位で表示されます。プログラムが確保している仮想的なメモリの量です。
- RSS:実際に物理メモリで使用しているサイズです。実メモリの使用量を表します。
- TTY:プロセスが関連付けられている端末です。
?はターミナルに関連付けられていないことを意味します。 - STAT:プロセスの状態を表すコードです。
Sはスリープ状態、Rは実行中などを意味します。 - START:プロセスが開始された時刻です。
- TIME:そのプロセスがCPUを使った累計時間です。
- COMMAND:実行されているコマンドやプログラム名です。プロセスが何をしているかがわかります。
これらの情報を見ることで、どのプログラムがシステムリソースを多く使っているか、どんなプログラムが動いているかが一目でわかります。
5. STATカラムの状態コード
STATカラムには、プロセスの状態を表す記号が表示されます。主な状態コードを覚えておくと便利です。
- R:実行中またはすぐに実行できる状態(Running)
- S:スリープ状態。何かの処理を待っている状態(Sleeping)
- D:割り込み不可能なスリープ状態。通常はディスク入出力を待っている状態
- Z:ゾンビプロセス。終了しているが、親プロセスが終了を認識していない状態
- T:停止している状態(Stopped)
- s:セッションリーダー。小文字のsが追加されている場合、そのプロセスがセッションのリーダーであることを示します
- +:フォアグラウンドプロセスグループに属していることを示します
- <:高い優先度で実行されていることを示します
たとえば、Ssと表示されている場合は、スリープ状態のセッションリーダーということになります。これらの記号を理解することで、プロセスの状態をより詳しく把握できます。
6. 特定のプロセスを検索する方法
ps auxコマンドの結果から、特定のプロセスだけを見たいときは、grepコマンドと組み合わせます。grepは文字列を検索するコマンドです。
たとえば、Apacheウェブサーバーのプロセスだけを表示したい場合は、以下のようにします。
ps aux | grep apache
www-data 456 0.5 2.3 456789 23456 ? S 10:05 0:15 /usr/sbin/apache2
www-data 457 0.3 2.1 456789 21234 ? S 10:05 0:10 /usr/sbin/apache2
user 2345 0.0 0.1 12345 1234 pts/0 S+ 12:00 0:00 grep apache
この例では、apacheという文字列を含むプロセスだけが表示されます。最後の行にgrep apache自体も表示されていますが、これは検索コマンド自身のプロセスです。
同様に、Pythonのプロセスを探したい場合は次のようにします。
ps aux | grep python
user 1234 1.2 3.4 678901 34567 pts/0 Ss 11:30 0:45 /usr/bin/python3 script.py
この方法を使えば、システム上で動いている特定のアプリケーションやサービスを素早く見つけることができます。
7. CPU使用率やメモリ使用率で並び替える
システムが重いとき、どのプロセスが原因かを調べるには、CPU使用率やメモリ使用率の高い順に並び替えると便利です。sortコマンドを使って並び替えができます。
CPU使用率が高い順に表示するには、以下のようにします。
ps aux --sort=-%cpu | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 5678 5.2 8.3 1234567 89012 ? Sl 09:00 15:30 /usr/bin/firefox
user 1234 1.2 3.4 678901 34567 pts/0 Ss 11:30 0:45 /usr/bin/python3
--sort=-%cpuは、CPU使用率の降順(高い順)で並び替えるオプションです。head -10を追加することで、上位10件だけを表示しています。
同じように、メモリ使用率が高い順に表示するには、次のようにします。
ps aux --sort=-%mem | head -10
この方法を使えば、システムリソースを多く消費しているプロセスをすぐに特定できます。システムのパフォーマンスを改善したいときに非常に役立ちます。
8. psコマンドの他のオプション組み合わせ
ps aux以外にも、psコマンドには様々なオプションの組み合わせがあります。目的に応じて使い分けることができます。
ps -efは、ps auxと似た結果を表示しますが、表示形式が少し異なります。こちらはUNIXスタイルのオプション指定です。
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:00 ? 00:00:01 /sbin/init
root 2 0 0 10:00 ? 00:00:00 [kthreadd]
ps -efでは、PPID(親プロセスID)が表示されるのが特徴です。親プロセスIDとは、そのプロセスを起動した元のプロセスの番号です。プロセスの親子関係を調べるときに便利です。
自分のプロセスだけを見たいときは、ps -u ユーザー名を使います。
ps -u user
このように、状況に応じてオプションを使い分けることで、より効率的にプロセス管理ができます。
9. プロセスの終了方法
ps auxコマンドで問題のあるプロセスを見つけたら、そのプロセスを終了させることができます。プロセスを終了させるには、killコマンドを使います。
まず、ps auxで終了させたいプロセスのPID(プロセスID)を確認します。そして、そのPIDを指定してkillコマンドを実行します。
kill 1234
この例では、PIDが1234のプロセスに終了シグナルを送ります。通常、プロセスは正常に終了します。
もしプロセスが終了しない場合は、強制終了させることもできます。
kill -9 1234
-9オプションは、強制終了シグナルです。ただし、強制終了はデータの損失やシステムの不安定化を招く可能性があるため、通常のkillコマンドで終了できない場合の最終手段として使います。
プロセス名で直接終了させたい場合は、pkillコマンドも便利です。
pkill firefox
これにより、Firefoxという名前を含むすべてのプロセスが終了します。ただし、意図しないプロセスまで終了させてしまう可能性があるため、注意が必要です。
10. psコマンドとtopコマンドの違い
ps auxと似たコマンドにtopコマンドがあります。両方ともプロセス管理に使われますが、使い方や特徴が異なります。
ps auxは、コマンドを実行した瞬間のプロセス情報を表示します。スナップショットのように、その時点での状態を一度だけ表示します。結果はターミナルに出力され、そのまま残ります。
一方、topコマンドは、プロセス情報をリアルタイムで更新し続けます。数秒ごとに画面が更新され、CPU使用率やメモリ使用率の変化を監視できます。
top
topコマンドを実行すると、画面全体がプロセス一覧に切り替わり、常に最新の情報が表示されます。終了するにはqキーを押します。
どちらを使うかは、目的によって決めます。過去のログと照らし合わせたり、特定の時点での情報を記録したりする場合はps auxが便利です。システムの負荷をリアルタイムで監視したい場合はtopが適しています。
また、htopというtopの改良版もあります。色分けされた見やすい表示と、マウスやキーボードでの操作が可能で、より直感的に使えます。ただし、システムによっては別途インストールが必要です。
プロセス管理は、Linuxシステムを運用する上で欠かせないスキルです。ps auxコマンドを使いこなせるようになれば、システムトラブルの原因究明や、パフォーマンスの最適化が格段に楽になります。最初は情報量が多くて戸惑うかもしれませんが、実際に使ううちに必要な情報を見つけられるようになります。