Linuxで「今どんなプログラムが動いているのか知りたい」と思ったことはありませんか?
そんなときに最も基本となるのがpsコマンドです。
psコマンドを使えば、現在実行中のプロセス一覧を確認できます。
また、プロセスID(PID)の確認や、特定のプログラムが起動しているかの確認、killコマンドでプロセスを終了する前の確認など、Linuxでは非常に使用頻度の高いコマンドです。
この記事では、Linux初心者向けにpsコマンドの基本的な使い方、代表的なオプション、grepとの組み合わせ、top・htopとの違いまで分かりやすく解説します。
- psコマンドとは
- psコマンドの基本構文
- 現在実行中のすべてのプロセスを表示する
- BSD形式で表示する(ps aux)
- ps -efとps auxの違い
- 各項目の見方
- 特定のプロセスを検索する方法
- grep自身を除外する方法
- PIDだけ取得する方法
- 親プロセスを確認する方法
- CPU使用率やメモリ使用率を表示する
- 指定したユーザーのプロセスだけ表示する
- ツリー形式で表示する
- 実行中のプロセスを開始時刻順に確認する
- CPU使用率順に並び替える
- メモリ使用率順に並び替える
- PIDを指定してプロセスを確認する
- 表示項目を自由に変更する
- プロセス数を数える方法
- psコマンドとtop・htopの違い
- psコマンドとpgrepの違い
- プロセスを終了する前に確認すること
- よくあるエラー
- よくある質問
- まとめ
psコマンドとは
ps(Process Status)は、現在実行中のプロセス情報を表示するLinuxコマンドです。
CPUやメモリをリアルタイム監視するtopやhtopとは異なり、実行した瞬間のプロセス一覧を表示するのが特徴です。
例えば次のような用途で利用されます。
- 実行中プロセスの確認
- PIDの確認
- 特定サービスの起動確認
- killコマンドで終了する前の確認
- シェルスクリプトでプロセスを判定する
Linuxサーバー管理では必ず覚えておきたい基本コマンドの一つです。
psコマンドの基本構文
ps [オプション]
オプションなしで実行すると、自分の端末で実行しているプロセスだけが表示されます。
ps
実行例
PID TTY TIME CMD
2185 pts/0 00:00:00 bash
2314 pts/0 00:00:00 ps
初めて実行すると「思ったより少ない」と感じるかもしれません。
これは、現在操作している端末(TTY)のプロセスだけが表示されるためです。
現在実行中のすべてのプロセスを表示する
Linuxでは、システム全体のプロセスを確認することがよくあります。
最もよく使われるのが次のコマンドです。
ps -ef
実行例
UID PID PPID CMD
root 1 0 /usr/lib/systemd/systemd
root 824 1 /usr/sbin/sshd
mysql 1032 1 /usr/sbin/mysqld
apache 1511 1 /usr/sbin/httpd
サーバー管理では、この形式を使用する機会が最も多いでしょう。
BSD形式で表示する(ps aux)
Linuxでは、BSD形式のオプションも広く利用されています。
ps aux
実行例
USER PID %CPU %MEM COMMAND
root 1 0.1 0.5 systemd
mysql 1032 3.5 8.2 mysqld
www-data 1814 0.2 1.3 apache2
ps auxでは、CPU使用率やメモリ使用率も表示されます。
そのため、プロセスの状態を簡単に確認したい場合によく利用されます。
ps -efとps auxの違い
どちらもシステム全体のプロセスを表示しますが、表示形式が異なります。
| コマンド | 特徴 |
|---|---|
ps -ef |
UNIX形式で表示される |
ps aux |
BSD形式で表示される |
Linuxでは、どちらもよく利用されます。
会社や現場によって利用する形式が異なるため、両方読めるようになっておくと安心です。
各項目の見方
ps -efでは主に次の項目が表示されます。
| 項目 | 意味 |
|---|---|
| UID | 実行ユーザー |
| PID | プロセスID |
| PPID | 親プロセスID |
| CMD | 実行コマンド |
特に覚えておきたいのはPIDです。
PIDは、killコマンドやstraceなど、他のコマンドでも頻繁に利用します。
特定のプロセスを検索する方法
大量のプロセスから目的のものを探すには、grepと組み合わせるのが一般的です。
ps -ef | grep nginx
例えばNginxが動いているか確認できます。
root 1514 1 nginx
www-data 1515 1514 nginx
Apacheであれば次のように検索します。
ps -ef | grep httpd
UbuntuやDebianではApacheの実行ファイル名がapache2の場合もあります。
ps -ef | grep apache2
grep自身を除外する方法
そのまま検索すると、grepコマンド自身も表示されます。
ps -ef | grep nginx
結果の一番下に、grep自身が表示されることがあります。
これを除外するには、さらにgrepで除外します。
ps -ef | grep nginx | grep -v grep
最近では、次回紹介するpgrepコマンドを使う方法もよく利用されています。
PIDだけ取得する方法
プロセスIDだけ必要な場合は、awkを組み合わせる方法があります。
ps -ef | grep nginx | grep -v grep | awk '{print $2}'
実行結果
1514
1515
シェルスクリプトでもよく使われる書き方です。
親プロセスを確認する方法
親子関係を確認したい場合は、PPID列を見ます。
ps -ef
例えば
PID PPID
2100 1
2142 2100
この場合、PID2100が親プロセスになります。
親子関係をもっと見やすく確認したい場合は、次の記事で紹介するpstreeもおすすめです。
CPU使用率やメモリ使用率を表示する
CPUやメモリ使用率を確認したい場合は、BSD形式の表示が便利です。
ps aux
主に次の列を確認します。
| 列 | 内容 |
|---|---|
| %CPU | CPU使用率 |
| %MEM | メモリ使用率 |
| VSZ | 仮想メモリサイズ |
| RSS | 実際に使用している物理メモリ |
CPUやメモリをリアルタイムで監視したい場合は、前回紹介したhtopやtopのほうが適しています。
指定したユーザーのプロセスだけ表示する
特定ユーザーのプロセスだけ確認したい場合は、-uオプションを利用します。
ps -u root
現在ログイン中のユーザーだけ表示したい場合は、次のようにも実行できます。
ps -u "$USER"
複数ユーザーが利用するサーバーでは非常によく使われるオプションです。
ツリー形式で表示する
親子関係をツリー表示したい場合は、次のように実行できます。
ps -ef --forest
実行例
systemd
├─sshd
│ └─bash
│ └─ps
└─mysqld
どのプロセスから子プロセスが作成されたのかが一目で分かります。
実行中のプロセスを開始時刻順に確認する
プロセスの開始時刻も確認できます。
ps -eo pid,user,lstart,cmd
サーバーを再起動したあと、どのタイミングでサービスが起動したかを確認するときに便利です。
CPU使用率順に並び替える
CPUを多く使用しているプロセスを確認したい場合は、--sortオプションを使用します。
ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu
CPU使用率が高い順に表示されます。
メモリ使用率順に並び替える
メモリ使用量が多いプロセスを調査する場合は、次のように実行します。
ps -eo pid,user,%cpu,%mem,cmd --sort=-%mem
メモリリークの調査でもよく利用されます。
PIDを指定してプロセスを確認する
PIDが分かっている場合は、そのプロセスだけ表示できます。
ps -p 1234
複数指定することも可能です。
ps -p 1234,5678
表示項目を自由に変更する
-oオプションを使うと、必要な項目だけ表示できます。
ps -o pid,user,%cpu,%mem,cmd
主な指定項目は次のとおりです。
| 項目 | 意味 |
|---|---|
| pid | プロセスID |
| user | 実行ユーザー |
| %cpu | CPU使用率 |
| %mem | メモリ使用率 |
| etime | 起動からの経過時間 |
| cmd | 実行コマンド |
必要な情報だけ表示できるため、シェルスクリプトでもよく利用されます。
プロセス数を数える方法
現在動作しているプロセス数を確認したい場合は、次のように実行します。
ps -ef | wc -l
ただし、この結果には見出し行も含まれます。
正確な件数だけ取得したい場合は、次のように書くこともあります。
ps -e --no-headers | wc -l
psコマンドとtop・htopの違い
| コマンド | 用途 |
|---|---|
| ps | 実行した瞬間のプロセス一覧を表示する |
| top | リアルタイム監視を行う |
| htop | リアルタイム監視と対話操作を行う |
人が画面を見ながら監視するならtopやhtop、スクリプトや調査用として結果を取得するならpsが向いています。
psコマンドとpgrepの違い
プロセスを検索するだけなら、pgrepの方がシンプルです。
| コマンド | 特徴 |
|---|---|
| ps | プロセス情報全体を取得できる |
| pgrep | プロセス名からPIDを検索できる |
次の記事では、pgrepコマンドについて詳しく解説します。
プロセスを終了する前に確認すること
プロセスを終了する前には、必ず対象のプロセスを確認しましょう。
ps -ef | grep nginx
PIDや実行ユーザー、コマンド名を確認したあとで、killコマンドを実行するのが基本です。
データベースやWebサーバーなどの重要なサービスは、直接killするよりもsystemctlで停止・再起動したほうが安全な場合があります。
よくあるエラー
grepしか表示されない
対象プロセスが存在しない場合は、grep自身だけ表示されることがあります。
ps -ef | grep nginx
その場合は、次のように除外してください。
ps -ef | grep nginx | grep -v grep
Permission deniedが表示される
一般ユーザーでは、一部情報が制限される環境があります。
必要に応じてsudoを利用してください。
sudo ps -ef
プロセスが見つからない
プロセスが既に終了している可能性があります。
リアルタイムで監視したい場合は、topやhtopの利用も検討しましょう。
よくある質問
psとps -efは何が違いますか?
psは現在の端末で実行中のプロセスだけを表示します。
ps -efはシステム全体のプロセスを表示します。
ps auxとps -efはどちらを使えばよいですか?
どちらでも問題ありません。
ps auxはCPU使用率やメモリ使用率を確認しやすく、ps -efはUNIX形式として広く利用されています。
PIDとは何ですか?
PIDはプロセスIDです。
Linuxでは実行中の各プロセスへ一意に割り当てられます。
killコマンドなどでも利用されます。
プロセス検索ならgrepとpgrepどちらが良いですか?
確認だけならpgrepの方が簡単です。
プロセス情報も一緒に見たい場合はpsとgrepの組み合わせが便利です。
リアルタイム監視はできますか?
psコマンドは実行した瞬間の情報を表示するコマンドです。
リアルタイム監視にはtopやhtopを利用してください。
まとめ
psコマンドは、Linuxで現在実行中のプロセスを確認するための基本コマンドです。
特に次のコマンドは覚えておくと役立ちます。
| コマンド | 用途 |
|---|---|
ps |
現在の端末のプロセスを表示 |
ps -ef |
システム全体のプロセスを表示 |
ps aux |
CPU・メモリ使用率も表示 |
ps -ef | grep プロセス名 |
特定プロセスを検索 |
ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu |
CPU使用率順に表示 |
ps -eo pid,user,%cpu,%mem,cmd --sort=-%mem |
メモリ使用率順に表示 |
障害対応では、まずpsでプロセスを確認し、その後topやhtopでリアルタイムの負荷を確認する流れが一般的です。
プロセスを終了する前には、対象が本当に停止してよいサービスなのかを十分確認してから操作しましょう。




コメント