言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. ps / top / htop

ps / top / htop

『ps』は現在実行中のプロセス一覧をスナップショットで表示します。『top』『htop』はリアルタイムでプロセスの状態やリソース使用量を監視します。サーバーの負荷確認やプロセスの特定によく使います。

構文

ps の基本的な使い方です。

ps              # 現在のシェルのプロセス
ps aux          # 全ユーザーの全プロセス(よく使う形式)
ps -ef          # 全プロセスをフル形式で表示
ps aux | grep プロセス名   # 特定プロセスを検索

top でリアルタイム監視を行います。

top
top -u ユーザー名   # 特定ユーザーのプロセスのみ
top -p PID         # 特定 PID のプロセスのみ

htop は top の拡張版です(要インストール)。

htop

コマンド・オプション一覧

コマンド概要
ps aux全ユーザーの全プロセスを表示します(a=全端末, u=ユーザー形式, x=端末なしも含む)。
ps -ef全プロセスをフル形式(PPID・スタート時刻付き)で表示します。
ps aux --sort=-%cpuCPU 使用率の降順で表示します。
ps aux --sort=-%memメモリ使用量の降順で表示します。
ps -p PID指定した PID のプロセス情報を表示します。
pgrep 名前プロセス名で PID を検索して表示します。
pgrep -la 名前PID とプロセス名を一緒に表示します。
topリアルタイムでプロセスとシステムリソースを監視します。
top -bn11回だけ表示してすぐ終了します(バッチモード・スクリプト向け)。
htopカラー表示・マウス操作・ツリー表示に対応した top の強化版です(要インストール)。

サンプルコード

以下の前提でサンプルを説明します。nginx と MySQL が実行中のサーバーを想定しています。

全ユーザーの全プロセスを表示します。もっともよく使う形式です。

ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY   STAT START   TIME COMMAND
root         1  0.0  0.1  19960  1532 ?     Ss   Mar05   0:01 /sbin/init
www-data  1234  0.0  0.2  55840  4096 ?     Ss   10:00   0:00 nginx: master
www-data  1235  0.0  0.1  55840  2048 ?     S    10:00   0:00 nginx: worker
mysql     2345  1.2  5.0 800000 50000 ?     Ssl  Mar05   2:30 /usr/sbin/mysqld

特定のプロセスを検索します。『grep -v grep』で grep 自身を除外するのがポイントです。

ps aux | grep nginx | grep -v grep
www-data  1234  0.0  0.2  55840  4096 ?  Ss  10:00  0:00 nginx: master
www-data  1235  0.0  0.1  55840  2048 ?  S   10:00  0:00 nginx: worker

『pgrep』でプロセス名から PID を検索します。『-la』オプションでコマンド名も表示します。

pgrep -la nginx
1234 nginx: master process /etc/nginx/nginx.conf
1235 nginx: worker process

CPU 使用率の高い順にトップ10を表示します。

ps aux --sort=-%cpu | head -11

メモリ使用量の大きい順にトップ10を表示します。

ps aux --sort=-%mem | head -11

スクリプトでプロセスの実行状態を確認するパターンです。『pgrep -x』は名前が完全一致するプロセスを検索します。

check_mysql.sh
if pgrep -x "mysqld" > /dev/null; then
    echo "MySQL は動作中です"
else
    echo "MySQL は停止しています"
fi
bash check_mysql.sh
MySQL は動作中です

なお、if 文はターミナルでも直接入力できます。『then』の後で Enter を押すと『> 』マークが表示され、これは「まだ入力が続く」というサインで、『fi』を入力すると実行されます。

if pgrep -x "mysqld" > /dev/null; then
    echo "MySQL は動作中です"
else
    echo "MySQL は停止しています"
fi
MySQL は動作中です

『top』をバッチモードで1回だけ実行します。スクリプトからシステム状態を取得する場合に便利です。

top -bn1 | head -5
top - 12:00:00 up 1 day,  2:30,  1 user,  load average: 0.15, 0.10, 0.05
Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.2 us,  0.5 sy,  0.0 ni, 98.0 id,  0.3 wa,  0.0 hi,  0.0 si
MiB Mem :   1024.0 total,    256.0 free,    512.0 used,    256.0 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.    400.0 avail Mem

実行中のプロセス数を数えます。

echo "実行中のプロセス数: $(ps aux | wc -l)"
実行中のプロセス数: 87

概要

$ ps aux』の出力の主要列:『USER』(実行ユーザー)、『PID』(プロセスID)、『%CPU』(CPU使用率)、『%MEM』(メモリ使用率)、『STAT』(プロセス状態: R=実行中, S=スリープ, Z=ゾンビ)、『COMMAND』(コマンド名)。

プロセスを停止するには kill / pkill / killall を使います。バックグラウンド実行・ジョブ管理は &(バックグラウンド実行) を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。