はじめに

こんにちは!今回はpsコマンドについて解説します。

psは実行中のプロセスを表示するコマンドです。“process status"の略ですね。

サーバーで「どのプログラムが動いているのか」「CPUやメモリはどのプロセスが使っているのか」を確認する時に活躍します。トラブル対応やシステム監視に必須のコマンドですよ。


psコマンドとは

psは、実行中のプロセス(プログラム)の一覧を表示する外部コマンドです。

プロセスID(PID)、CPU使用率、メモリ使用量、実行ユーザー、コマンド名など、プロセスに関する様々な情報を表示できます。トラブル対応やパフォーマンス監視に欠かせないコマンドです。

主な用途:

  • 実行中のプロセス確認
  • CPU・メモリ使用量の監視
  • 特定プロセスの情報取得

基本構文

1
ps [オプション]

オプションは様々な組み合わせが可能です。


主なオプション

オプション 説明
-a すべてのプロセスを表示
-u ユーザー名と共に表示
-x ターミナルなしのプロセスも表示
-e すべてのプロセスを表示
-f 詳細情報を表示
-o 表示項目をカスタマイズ
aux 最も一般的な組み合わせ(a+u+x)
ef 詳細な全プロセス表示

使用例

例1: 基本的なプロセス表示

1
ps

実行結果:

1
2
3
  PID TTY      STAT   TIME COMMAND
 1234 pts/0    Ss     0:00 bash
 5678 pts/0    R+     0:00 ps

現在のシェルおよび関連プロセスを表示します。最小限の情報です。


例2: すべてのプロセスを表示(最も常用)

1
ps aux

実行結果:

1
2
3
4
USER   PID %CPU %MEM   VSZ   RSS TTY  STAT START TIME COMMAND
root     1  0.1  0.5 169688  5500 ?    Ss   10:00 0:01 /sbin/init
mysql 2345  5.2  8.3 1543215 85000 ?    Sl   10:05 0:30 /usr/sbin/mysqld
apache 3456  0.3  1.2 456789  12000 ?    S    10:06 0:05 /usr/sbin/apache2

すべてのプロセスをCPU・メモリ使用率とともに表示します。最も実用的な形式です。


例3: 特定のプロセスを検索

1
ps aux | grep apache

実行結果:

1
2
apache   3456  0.3  1.2 456789 12000 ?  S  10:06 0:05 /usr/sbin/apache2
root     4567  0.0  0.1  12345  1000 ?  S  10:07 0:00 grep apache

grepで特定プロセスを検索します。apache関連のプロセスを確認できます。


例4: ツリー形式で表示(親プロセスが見やすい)

1
ps -ef --forest

実行結果:

1
2
3
4
5
UID        PID  PPID  C STIME TTY      STAT   TIME COMMAND
root         1     0  0 10:00 ?        Ss     0:01 /sbin/init
root       234     1  0 10:01 ?        Ss     0:01 /lib/systemd/systemd-logind
user      3456   234  0 10:05 pts/0    Ss     0:00 /bin/bash
user      3457  3456  0 10:05 pts/0    R+     0:00 ps -ef --forest

プロセスの親子関係をツリー状に表示します。親プロセスがわかりやすいです。


例5: CPU使用率でソート

1
ps aux --sort=-%cpu | head -10

実行結果:

1
2
3
4
USER     PID %CPU %MEM    VSZ    RSS TTY  STAT START   TIME COMMAND
mysql   2345  5.2  8.3 1543215 85000 ?    Sl   10:05  0:30 /usr/sbin/mysqld
apache  3456  1.2  2.1  456789 21000 ?    S    10:06  0:15 /usr/sbin/apache2
php-fpm 4567  0.8  1.5  345678 15000 ?    S    10:07  0:10 /usr/sbin/php-fpm

CPU使用率でソートして上位を表示します。CPU消費の多いプロセスを特定できます。


例6: メモリ使用量でソート

1
ps aux --sort=-%mem | head -5

実行結果:

1
2
3
USER     PID %CPU %MEM     VSZ    RSS TTY STAT START   TIME COMMAND
mysql   2345  5.2  8.3 1543215 85000 ?   Sl   10:05  0:30 /usr/sbin/mysqld
apache  3456  0.3  2.1  456789 21000 ?   S    10:06  0:05 /usr/sbin/apache2

メモリ使用量でソートします。メモリリークの検出に役立ちます。


例7: 特定ユーザーのプロセスのみ表示

1
ps -u apache

実行結果:

1
2
3
  PID TTY      STAT   TIME COMMAND
 3456 ?        S      0:05 /usr/sbin/apache2
 3457 ?        S      0:04 /usr/sbin/apache2

特定ユーザー(apache)が実行中のプロセスのみ表示します。


例8: 特定のプロセスIDの詳細情報

1
ps -p 2345 -o pid,user,vsz,rss,comm

実行結果:

1
2
  PID USER      VSZ    RSS COMM
 2345 mysql 1543215  85000 mysqld

特定のプロセスID(2345)の詳細情報を表示します。カスタマイズ表示が便利です。


例9: プロセスの親子関係を確認

1
ps -o pid,ppid,cmd | grep apache

実行結果:

1
2
3
 PID  PPID CMD
3456     1 /usr/sbin/apache2
3457  3456 /usr/sbin/apache2 worker

PIDとPPID(親プロセスID)を表示して親子関係を確認できます。


例10: バックグラウンドプロセスの監視

1
watch -n 1 'ps aux | grep myapp'

実行結果:

1
(1秒ごとにmyappのプロセス情報を更新表示)

watchコマンドと組み合わせてプロセスをリアルタイム監視できます。


Tips・注意点

psのオプション形式の違い

1
2
3
4
5
6
7
# BSD形式(推奨):スペースなし
ps aux
ps -ef

# UNIX形式:スペースあり
ps -a -u -x
ps -e -f

両方の形式が使えますが、BSD形式(ps aux)が最も一般的です。


%CPUと%MEMについて

1
2
3
# %CPU:現在のCPU使用率(100%を超えることもある)
# %MEM:全体メモリに対する使用率
ps aux

%CPUはマルチコア環境では100%を超えることがあります。


topコマンとの違い

1
2
3
4
5
# ps:スナップショット(その時点の状況)
ps aux

# top:リアルタイム監視
top

psは実行時点の情報、topは継続的な監視に適しています。


実践的な使い方

実行中のすべてのプロセスを確認

1
ps aux

システム全体の状態確認の最初のステップです。


特定プロセスのPIDを取得してkillする

1
2
3
4
# PID取得
ps aux | grep apache
# PID 3456を取得したら
kill 3456

プロセスを停止する時に使う標準手順です。


メモリリークの検出

1
2
ps aux --sort=-%mem | head -5
# メモリ使用量が増え続ければメモリリークの可能性

メモリ使用量が異常に高いプロセスを検出します。


僵尸プロセスの確認

1
ps aux | grep Z

終了したが親プロセスが回収していない僵尸プロセスを確認できます。


まとめ

psコマンドのポイント:

  • 基本形式ps aux(最も常用)
  • 詳細表示ps -ef
  • ツリー表示ps -ef --forest
  • 特定プロセスps aux | grep name
  • CPU優先度ps aux --sort=-%cpu
  • メモリ優先度ps aux --sort=-%mem
  • カスタム出力ps -o pid,user,comm

プロセス管理とトラブル対応に必須のコマンドです。ps auxで全体状況を把握し、必要に応じてソートや検索で詳細を確認するのが標準的なワークフローですよ!