この記事では、現在実行中のプロセスを確認する方法から、不要になったプロセスを安全に終了させるコマンドまで、Linuxにおけるプロセス管理の基本を解説します。
ps
コマンドを使ったプロセスの状態確認方法と、その出力の見方top
コマンドを使ったリアルタイムなプロセス監視方法と、操作のヒントkill
、pkill
、killall
コマンドの使い分けと安全なプロセス終了方法- プロセス管理における注意点とトラブルシューティングのヒント
ps aux
で全体を把握する「サーバーの反応がどうも遅いな…」「特定のプログラムが動いているか確認したい」といった場面でまず使うのがps
コマンドです。ps
は、現在実行中のプロセスを一覧表示します。特にaux
オプションと組み合わせることで、全ユーザーの全プロセスを詳細に確認できます。
ps aux
a
: 端末に関連付けられていないプロセスも表示u
: ユーザー名、CPU使用率、メモリ使用率など、詳細な情報を表示x
: 制御端末を持たないプロセスも表示
このコマンドの出力で、CPUやメモリを大量に消費しているプロセスや、意図しないプロセスが動いていないかを確認しましょう。
ps aux
コマンドの出力例と見方
ps aux
を実行すると、以下のような形式でプロセスの情報が表示されます。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 225168 9364 ? Ss May01 0:03 /sbin/init
user 1523 0.2 1.1 482308 45876 ? Sl May01 2:01 /usr/lib/firefox/firefox
この出力で特に注目すべきは以下の列です。
USER
: プロセスを実行しているユーザー名。PID
: プロセスID。プロセスを一意に識別する番号で、kill
コマンドでプロセスを終了する際に指定します。%CPU
: CPU使用率。プロセスがどれだけCPUリソースを消費しているかを示します。%MEM
: メモリ使用率。プロセスがどれだけメモリを消費しているかを示します。STAT
: プロセスの状態。
プロセスを絞り込んで確認する
特定のプロセスだけを確認したい場合は、grep
コマンドと組み合わせると便利です。例えば、Webサーバーのhttpd
プロセスを確認したい場合は次のようになります。
ps aux | grep httpd
プロセスの状態(STAT列)について
ps aux
の出力にはSTATという列があり、これはプロセスの現在の状態を示します。
状態 | 意味 | 補足 |
---|---|---|
R |
実行中 (Running) | CPUを使用している、またはすぐに実行可能な状態。 |
S |
待機中 (Sleeping) | イベントを待っている状態。ほとんどのプロセスはこれ。 |
D |
アンインタラプタブルスリープ (Disk sleep) | I/O処理(ディスク書き込みなど)を待っており、割り込みができない状態。kill でも停止できない場合が多いです。 |
Z |
ゾンビ (Zombie) | 親プロセスに終了ステータスが回収されず、プロセス情報だけが残っている状態。kill では終了できません。 |
T |
停止中 (Stopped) | 実行が一時停止している状態(Ctrl+Zなど)。 |
ゾンビプロセスはシステムリソースをほとんど消費しませんが、数が増えると問題になることがあります。通常は親プロセスが適切に終了処理を行えば解消されます。
top
コマンドps aux
で一時的なスナップショットは撮れますが、プロセスの状態が刻々と変化する状況ではtop
コマンドが便利です。top
は、CPU使用率やメモリ使用率が高いプロセスをリアルタイムで監視できます。
top
top
を実行すると、常に情報が更新されるため、どのプロセスがシステムリソースを消費しているかを動的に把握するのに役立ちます。top
の上部にはCPUやメモリ全体の利用状況が表示され、下部にはプロセスごとの詳細な一覧が表示されます。PID
列がプロセスIDです。
top
コマンドの便利な操作
top
実行中に以下のキーを押すことで、表示をソートできます。
P
: CPU使用率でソート(デフォルト)M
: メモリ使用率でソートq
:top
を終了
kill
、pkill
、killall
アプリケーションがフリーズしたり、バックグラウンドで動いているプロセスが不要になったりした場合、それらのプロセスを終了させる必要があります。その際に使うのがkill
系のコマンドです。
それぞれのコマンドには特徴があり、状況に応じて使い分けることが重要です。
コマンド名 | 用途 | 例 | 備考 |
---|---|---|---|
kill |
特定のPIDを指定してプロセスを終了する | kill 12345 |
最も基本的な停止方法。シグナルを指定しない場合、TERM シグナルが送られます。 |
pkill |
プロセス名やユーザーなど、条件を指定してプロセスを終了する | pkill -u username |
プロセス名の一部や正規表現で検索して終了できるため、柔軟性が高いです。複数のプロセスを一括で終了させたい場合に便利。 |
killall |
プロセス名を指定して、該当するすべてのプロセスを終了する | killall firefox |
pkill と似ていますが、killall は完全一致するプロセス名にのみ作用します。macOSのkillall は「コマンド名(バイナリ名)」にのみ反応し、一部のLinuxディストリビューションでは挙動が異なる場合や利用できない場合もあります。ご自身の環境での挙動はman killall コマンドで確認することをお勧めします。
|
シグナルについて
kill
コマンドは、プロセスにシグナルを送ることで動作を制御します。代表的なシグナルは以下の通りです。
TERM
(15): プロセスに終了を促すシグナル。プロセスは終了処理を行う猶予があります。通常はこのシグナルを使用します。KILL
(9): プロセスを強制終了させるシグナル。プロセスは終了処理を行うことなく即座に停止します。データが失われる可能性があるため、最終手段として利用します。
kill
コマンドでシグナルを指定するには、-SIGNAL_NUMBER
または-SIGNAL_NAME
の形式で指定します。
kill -9 12345 # PID 12345 のプロセスを強制終了
kill -KILL 12345 # 上記と同じ意味
注意:
kill
、pkill
、killall
コマンドは強力なツールです。特にsudo
やroot
権限でこれらのコマンドを使う場合、システム全体の重要なプロセス(例:systemd
やsshd
など)まで停止させてしまう可能性があります。コマンド実行前には必ず対象のプロセスが正しいか確認し、慎重に操作しましょう。安易な強制終了は、システム不安定化やデータ破損につながるリスクがあります。
-
特定のプロセスがフリーズして応答しない場合:
ps aux | grep [プロセス名]
でプロセスのPIDを特定します。kill [PID]
で終了を促します。- それでも終了しない場合は
kill -9 [PID]
で強制終了します。
-
同じ名前のアプリケーションが複数起動していて、全て終了させたい場合:
killall [プロセス名]
を使用します。例えば、開いている全てのFirefoxを閉じたい場合はkillall firefox
です。- より柔軟な絞り込みが必要な場合は、
pkill [プロセス名の一部または正規表現]
を利用します。
-
どうしてもプロセスが終了しない場合(ゾンビやDステータス):
- ゾンビプロセス(
STAT
がZ
)は、親プロセスが子プロセスの終了ステータスを回収していない状態です。kill
では終了できず、親プロセスを終了させるか、システムを再起動することで解消されることが多いです。 - アンインタラプタブルスリープ(
STAT
がD
)のプロセスは、デバイスの応答待ちなどで割り込みができない状態です。この状態のプロセスは、OSの再起動以外で終了させるのが非常に難しい場合がほとんどです。
- ゾンビプロセス(
- Q.
kill
コマンドで自分自身のbashや重要なプロセスを終了したらどうなる?- A.
- 終了したシェルは即座にログアウトされます。重要なプロセスを終了するとシステム障害の原因になります。必ずPIDやプロセス名が正しいことを再確認しましょう。
- Q.
kill -KILL
(-9
)でも消えないプロセスがあるのはなぜ?- A.
- 「D(アンインタラプタブルスリープ)」やゾンビ状態のプロセスには
kill -9
も効果がありません。これらはカーネルやハードウェアの応答待ちの状態であり、基本的にシステムの再起動が必要になる場合が多いです。
htop
コマンドは、top
コマンドの強化版です。視覚的にわかりやすいインターフェースで、カーソルを使ってプロセスを選び、直接kill
することも可能です。より直感的にプロセスを管理したい場合に便利なので、ぜひ試してみてください(別途インストールが必要な場合があります)。
この記事では、Linuxにおけるプロセス管理の基礎として、ps
コマンドによるプロセスの確認と状態の把握、top
コマンドによるリアルタイム監視、そしてkill
、pkill
、killall
コマンドを使ったプロセスの終了方法について解説しました。これらのコマンドを適切に使いこなすことで、システムの安定稼働を維持し、トラブル発生時にも迅速に対応できるようになります。
この記事が、プロセスの確認とkill
コマンドについて理解を深める一助となれば幸いです。
ご覧いただきありがとうございました。
次回は、ファイルの圧縮・解凍について解説します。