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=-%cpu | CPU 使用率の降順で表示します。 |
| ps aux --sort=-%mem | メモリ使用量の降順で表示します。 |
| ps -p PID | 指定した PID のプロセス情報を表示します。 |
| pgrep 名前 | プロセス名で PID を検索して表示します。 |
| pgrep -la 名前 | PID とプロセス名を一緒に表示します。 |
| top | リアルタイムでプロセスとシステムリソースを監視します。 |
| top -bn1 | 1回だけ表示してすぐ終了します(バッチモード・スクリプト向け)。 |
| 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 を使います。バックグラウンド実行・ジョブ管理は &(バックグラウンド実行) を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。