ps・kill・top
Linux では、動作中のプログラムは「プロセス」として管理されます。
ps でプロセスを一覧表示し、top でリアルタイムに監視し、kill で停止させます。
サーバーの問題対応やアプリケーションの動作確認でよく使います。
ブラウザでコマンドを試す
以下の端末では whoami や echo など基本的なコマンドを試せます。
ps や top はサーバー上のプロセスを扱うため、このシミュレーターでは実行できません。
実際のコマンドは以下のセクションで確認してください。
基本コマンドを試す
シミュレーターwhoami でユーザー名を確認したり、date で現在時刻を表示したりできます。ps や kill は実際のLinux環境でお試しください。
psでプロセスを一覧表示する
ps は、現在動作しているプロセスの一覧を表示します。
ps
引数なしでは、自分が起動したプロセスだけが表示されます。
すべてのユーザーのプロセスを表示するには、aux オプションを組み合わせます。
ps aux
実行結果の例です。
USER PID %CPU %MEM VSZ RSS STAT COMMAND
root 1 0.0 0.1 22560 5120 Ss /sbin/init
appuser 1234 1.2 5.8 820000 60000 Sl node server.js
各列の意味は次のとおりです。
| 列 | 意味 |
|---|---|
USER | プロセスを実行しているユーザー |
PID | プロセスID(操作時に使う番号) |
%CPU | CPU 使用率 |
%MEM | メモリ使用率 |
STAT | プロセスの状態 |
COMMAND | 実行中のコマンド |
STAT の代表的な値は次のとおりです。
| 状態 | 意味 |
|---|---|
S | スリープ中(入力待ち) |
R | 実行中(CPU を使用中) |
Z | ゾンビ(終了したが後片付けが済んでいない) |
T | 停止中 |
プロセスを絞り込む
ps aux の出力を grep とパイプで組み合わせると、特定のプロセスだけを探せます。
ps aux | grep "node"
アプリケーション名や PID を調べるときによく使います。
topでリアルタイムに監視する
top は、CPU やメモリの使用率が高いプロセスをリアルタイムで一覧表示します。
top
起動すると、数秒ごとに更新される一覧が表示されます。
終了するには q を押します。
top の中でよく使うキー操作は次のとおりです。
| キー | 操作 |
|---|---|
q | 終了する |
k | プロセスを終了させる(PID を入力) |
P | CPU 使用率の高い順に並べる |
M | メモリ使用率の高い順に並べる |
1 | CPU ごとの使用率を表示する |
top の代わりに htop が使える環境では、色付きで見やすく操作もしやすくなります。
htop
killでプロセスを終了させる
kill は、プロセスに「シグナル」を送るコマンドです。
デフォルトでは SIGTERM(正常終了の要求)を送ります。
kill 1234
1234 は終了させたいプロセスの PID です。
ps aux | grep プロセス名 で PID を確認してから実行します。
強制終了する
SIGTERM を受け取っても終了しないプロセスには、強制終了のシグナル SIGKILL を送ります。
kill -9 1234
-9 は SIGKILL のシグナル番号です。
プロセスは後片付けをせずに即座に終了します。
データが壊れる可能性があるため、通常の kill で終了しない場合の最終手段として使います。
プロセス名で終了させる
pkill を使うと、PID ではなくプロセス名でシグナルを送れます。
pkill -f "node server.js"
killall は同じ名前のプロセスをまとめて終了させます。
killall nginx
killの前に確認する
kill を実行する前に、対象の PID が正しいかを必ず確認してください。
kill -0 PID を使うと、シグナルを送らずにプロセスの存在だけを確認できます。
kill -0 1234 && echo "プロセスが存在します" || echo "プロセスは存在しません"
プロセス管理の典型的な流れ
サーバー上でアプリケーションが応答しなくなった場合の手順例です。
ps aux | grep "myapp"
top
kill 5678
kill -9 5678
ps aux | grep "myapp"
便利な組み合わせ
CPU 使用率の高いプロセスを上位 5 件表示する
ps aux --sort=-%cpu | head -6
メモリ使用量の多いプロセスを探す
ps aux --sort=-%mem | head -6
特定のポートを使っているプロセスを調べる
lsof -i :3000
lsof -i :ポート番号 は、特定ポートを占有しているプロセスの PID を調べるときに便利です。
まとめ
ps aux: すべてのプロセスを一覧表示するps aux | grep 名前: 特定のプロセスを探すtop: CPU・メモリの使用状況をリアルタイムで監視するkill PID: プロセスに正常終了を要求するkill -9 PID: プロセスを強制終了するpkill -f 名前: プロセス名で終了させる
プロセス管理はサーバー運用の基本です。
問題が起きたときに慌てず対応できるよう、ps・top・kill の流れを覚えておきましょう。