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
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 [プロセス名の一部または正規表現] を利用します。STATがZ)は、親プロセスが子プロセスの終了ステータスを回収していない状態です。killでは終了できず、親プロセスを終了させるか、システムを再起動することで解消されることが多いです。STATがD)のプロセスは、デバイスの応答待ちなどで割り込みができない状態です。この状態のプロセスは、OSの再起動以外で終了させるのが非常に難しい場合がほとんどです。killコマンドで自分自身のbashや重要なプロセスを終了したらどうなる?kill -KILL (-9)でも消えないプロセスがあるのはなぜ?kill -9も効果がありません。これらはカーネルやハードウェアの応答待ちの状態であり、基本的にシステムの再起動が必要になる場合が多いです。htopコマンドは、topコマンドの強化版です。視覚的にわかりやすいインターフェースで、カーソルを使ってプロセスを選び、直接killすることも可能です。より直感的にプロセスを管理したい場合に便利なので、ぜひ試してみてください(別途インストールが必要な場合があります)。
この記事では、Linuxにおけるプロセス管理の基礎として、psコマンドによるプロセスの確認と状態の把握、topコマンドによるリアルタイム監視、そしてkill、pkill、killallコマンドを使ったプロセスの終了方法について解説しました。これらのコマンドを適切に使いこなすことで、システムの安定稼働を維持し、トラブル発生時にも迅速に対応できるようになります。
この記事が、プロセスの確認とkillコマンドについて理解を深める一助となれば幸いです。
ご覧いただきありがとうございました。
次回は、ファイルの圧縮・解凍について解説します。