プロセス管理の基本:ps / top / killコマンドでシステムを把握する
Linuxシステムを運用していると、アプリケーションが応答しなくなったり、予期せぬ負荷がかかったりすることがあります。このような時、システムの「今」を把握し、適切に対処するために必要となるのがプロセス管理です。

この記事では、現在実行中のプロセスを確認する方法から、不要になったプロセスを安全に終了させるコマンドまで、Linuxにおけるプロセス管理の基本を解説します。
この記事でわかること
  • psコマンドを使ったプロセスの状態確認方法と、その出力の見方
  • topコマンドを使ったリアルタイムなプロセス監視方法と、操作のヒント
  • killpkillkillallコマンドの使い分けと安全なプロセス終了方法
  • プロセス管理における注意点とトラブルシューティングのヒント

プロセスが暴走?まずは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を終了

応答しないプロセスを停止する:killpkillkillall

アプリケーションがフリーズしたり、バックグラウンドで動いているプロセスが不要になったりした場合、それらのプロセスを終了させる必要があります。その際に使うのが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 # 上記と同じ意味

注意: killpkillkillallコマンドは強力なツールです。特にsudoroot権限でこれらのコマンドを使う場合、システム全体の重要なプロセス(例:systemdsshdなど)まで停止させてしまう可能性があります。コマンド実行前には必ず対象のプロセスが正しいか確認し、慎重に操作しましょう。安易な強制終了は、システム不安定化やデータ破損につながるリスクがあります。


この状況で困ったらコレ!
  • 特定のプロセスがフリーズして応答しない場合:
    1. ps aux | grep [プロセス名] でプロセスのPIDを特定します。
    2. kill [PID] で終了を促します。
    3. それでも終了しない場合は kill -9 [PID] で強制終了します。
  • 同じ名前のアプリケーションが複数起動していて、全て終了させたい場合:
    • killall [プロセス名] を使用します。例えば、開いている全てのFirefoxを閉じたい場合は killall firefox です。
    • より柔軟な絞り込みが必要な場合は、pkill [プロセス名の一部または正規表現] を利用します。
  • どうしてもプロセスが終了しない場合(ゾンビやDステータス):
    • ゾンビプロセス(STATZは、親プロセスが子プロセスの終了ステータスを回収していない状態です。killでは終了できず、親プロセスを終了させるか、システムを再起動することで解消されることが多いです。
    • アンインタラプタブルスリープ(STATDのプロセスは、デバイスの応答待ちなどで割り込みができない状態です。この状態のプロセスは、OSの再起動以外で終了させるのが非常に難しい場合がほとんどです。

よくある質問 Q&A
Q.
killコマンドで自分自身のbashや重要なプロセスを終了したらどうなる?
A.
終了したシェルは即座にログアウトされます。重要なプロセスを終了するとシステム障害の原因になります。必ずPIDやプロセス名が正しいことを再確認しましょう。
Q.
kill -KILL (-9)でも消えないプロセスがあるのはなぜ?
A.
「D(アンインタラプタブルスリープ)」やゾンビ状態のプロセスにはkill -9も効果がありません。これらはカーネルやハードウェアの応答待ちの状態であり、基本的にシステムの再起動が必要になる場合が多いです。

ワンポイント

htopコマンドは、topコマンドの強化版です。視覚的にわかりやすいインターフェースで、カーソルを使ってプロセスを選び、直接killすることも可能です。より直感的にプロセスを管理したい場合に便利なので、ぜひ試してみてください(別途インストールが必要な場合があります)。


まとめ

この記事では、Linuxにおけるプロセス管理の基礎として、psコマンドによるプロセスの確認と状態の把握、topコマンドによるリアルタイム監視、そしてkillpkillkillallコマンドを使ったプロセスの終了方法について解説しました。これらのコマンドを適切に使いこなすことで、システムの安定稼働を維持し、トラブル発生時にも迅速に対応できるようになります。

この記事が、プロセスの確認とkillコマンドについて理解を深める一助となれば幸いです。
ご覧いただきありがとうございました。

次回は、ファイルの圧縮・解凍について解説します。

私たちは、お客さまが私たちのウェブサイトをどのように使用するのかを理解し、お客さまの体験を改善するために Cookie を使用しています。 閲覧を続けると Cookie の使用に同意したことになります。
拒否した場合、このウェブサイトにアクセスしてもお客さまの情報は追跡されません。 情報を追跡しない設定を記憶するために、ウェブブラウザで 1 つだけ Cookie が使用されます。