コマンドラインでLinuxプロセスを強制終了する方法

コマンドラインでLinuxプロセスを強制終了する方法

Linuxでは、実行中のプロセス管理がシステムパフォーマンスと安定性を保つ重要な要素となります。応答しないプロセスや異常な動作をするプロセスに遭遇した場合、さまざまなコマンドを使って強制終了することが可能です。

Linuxでプロセスを強制終了するには、killコマンドを使用してプロセスIDPIDまたはプロセス名を指定します。killコマンドはプロセスにシグナルを送信し、終了を要求したり強制的に停止させることができます。

さらに、killallpkillといった他のコマンドもプロセス名を基にしたプロセス終了を可能にし、複数のプロセスを同時に終了させる優れた柔軟性があります。

各コマンドにはそれぞれ異なるシグナル送信オプションがあり、プロセスを穏やかに終了させるか強制的に停止させるかを選択できます。本記事では、こうしたコマンドを詳しく解説し、さまざまなシナリオで効果的に使用する方法を紹介していきます。

前提条件

Linuxでプロセスを強制終了する方法を学ぶ前に、以下の前提条件を満たしているか確認してください。

  • Linuxベースのマシン:Linuxディストリビューションを実行するコンピューターまたはサーバーが必要です。お持ちでない場合は、HostingerからLinux VPSを購入することをご検討ください。
  • ターミナルまたはSSHアクセス:ローカルマシンでターミナルを開くか、PuTTYなどのSSHアプリケーションを使用してLinuxサーバーにリモート接続します。
  • root権限または適切な権限:プロセスを強制終了するほとんどのコマンドには、rootまたは特権管理者権限が必要です。実行に必要な権限があることを確認してください。
  • インストール済みツール:システムに必要なツールとコマンドがインストールされていることを確認してください。検証するには、以下のいずれかを実行します。
sudo apt-get install procps x11-utils  # for Debian-based distributions
sudo yum install procps-ng xorg-x11-apps  # for Red Hat-based distributions

Linuxでプロセスを特定する方法

重要なシステム操作を誤って停止しないよう、まず正しいプロセスを特定する必要があります。Linuxで実行中のプロセスの詳細を見つけるためのコマンドをいくつか紹介しましょう。

psコマンドでプロセスを特定

psコマンドは、実行中のプロセスとその詳細(ユーザー、プロセスID(PID)、CPUとメモリ使用量、プロセスを開始したコマンドなど)の完全なリストを提供します。

基本的な構文は次のとおりです。

ps [options]

コマンドに追加できるオプションは以下のとおりです。

  • -a – すべてのユーザーに関する情報を表示
  • -u – ユーザー指向の出力を含める
  • -x – 制御端末なしのプロセスを表示

たとえば、以下を実行した場合:

ps -aux

以下のような出力が表示されます。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root 1 0.0 0.1 169364 8824 ? Ss Jul08 0:05 /sbin/init

root 2 0.0 0.0 0 0 ? S Jul08 0:00 [kthreadd]

...

pidofでPIDを検索

pidofコマンドは、名前でプロセスのPIDを検索します。正確なプロセス名をすでに知っている場合に、シンプルで便利です。

pidof [options] [program]

pidofで利用できる便利なオプションには以下があります。

  • -c – 同じrootディレクトリのプロセスのみを返す
  • -o – 指定されたPIDを除外
  • -s – 単発(最初のPIDを返す)
  • -x – スクリプトも含める(スクリプトが開始したプロセスを返す)

たとえば、sshdのPIDを取得するには、以下を実行します。

pidof sshd

実行中のインスタンスが1つのみの場合、出力は単一のPIDになります。

1234

ただし、複数のインスタンスが実行中の場合は、複数のPIDが表示されます。

1234 5678

pgrepでPIDを検索

pgrepコマンドは、プロセスを見つけるより高度な方法を提供します。パターンと呼ばれるプロセス名にマッチできる特定の選択基準に基づいてプロセスを返すことが可能です。

pgrep [options] [pattern]

追加できる一般的なオプションは以下のとおりです。

  • -f – 完全なコマンドラインに対してマッチ
  • -l – プロセス名とそのIDをリスト表示
  • -n – マッチするプロセスのうち最新のものを選択
  • -o – マッチするプロセスのうち最古のものを選択
  • -u – 有効ユーザーIDがリストされているプロセスのみをマッチ
  • -x-fが指定されている場合、名前またはコマンドラインがパターンと完全に一致するプロセスのみをマッチ

たとえば、ユーザーjohnが所有するすべてのプロセスの名前とPIDを表示するには、以下を使用できます。

pgrep -lu john

上記のコマンドは以下を返します。

1234 process_name_1

5678 process_name_2

...

topで実行中のプロセスを表示

topコマンドは、実行中のプロセスのインタラクティブでリアルタイムな表示を提供します。PID、ユーザー、各プロセスが使用するメモリとCPU電力の量、実行時間が表示されるでしょう。

すべてのアクティブプロセスのリストを表示するには、以下を実行します。

top

以下のような出力が表示されます。

top - 15:37:58 up  2:13,  2 users,  load average: 0.00, 0.01, 0.05

Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 4045860 total, 3810124 free, 140408 used, 94808 buff/cache

KiB Swap: 2097148 total, 2097148 free, 0 used. 3643028 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1 root 20 0 169364 8824 6508 S 0.0 0.2 0:05.14 systemd

2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd

...

topインターフェースを終了するには、Qを押します。

コマンドなしでプロセスをリスト表示

Hostingerユーザーは、Kodee AIアシスタントに質問することで、コマンドなしで仮想専用サーバー(VPS)内のプロセスをリスト表示できます。「ユーザーrootが所有するすべてのプロセスとそのPIDを表示」のようなプロンプトを入力するだけで、Kodeeが対応するプロセスを出力してくれるでしょう。

killコマンドシグナルの理解

killコマンドシグナルは、プロセスに送信されるメッセージで、特定のアクションを実行するよう指示します。Unixベースのオペレーティングシステムの基本的な部分であり、ユーザーとプログラムがプロセスを効果的に制御できるようにしています。

以下のコマンドでLinuxで利用可能なすべてのシグナルを表示可能です。

kill -l

すべてのシグナルと対応する番号および名前がリスト表示されます。例:

  • SIGTERM(シグナル15):プロセスに終了を要求するシグナルです。プロセスはシグナルをキャプチャし、クリーンアップ操作を実行してから終了できます。デフォルトでは、他のシグナルが指定されていない場合、killコマンドはSIGTERMを送信します。
  • SIGKILL(シグナル9):プロセスを強制的に終了させます。プロセスはシグナルをキャプチャまたは無視できないため、即座に終了されるでしょう。プロセスがSIGTERMに応答しない場合の最後の手段として使用すべきです。
  • SIGINT(シグナル2):通常、ターミナルでCtrl + Cを押したときに送信されます。プロセスを中断し、通常はフォアグラウンドで実行されているプロセスを停止するために使用されるシグナルです。
  • SIGHUP(シグナル1):制御端末が閉じられたときにプロセスに送信され、設定ファイルを再読み込みするためによく使用されます。
  • SIGQUIT(シグナル3):プロセスを終了し、デバッグ用のコアダンプファイルを生成します。
  • SIGSTOP(シグナル19):プロセスを終了させずに一時停止し、ターミナルでCtrl + Zを押すのと似ています。
  • SIGCONT(シグナル18):SIGSTOPまたはCtrl + Zによって停止されたプロセスを継続します。

たとえば、SIGTERMでプロセスを終了するには、以下を実行します。

kill -15 [PID]

適切なシグナルを選択することの重要性

シナリオと期待する影響に基づいて正しいkillシグナルを使用することで、特にバックグラウンドタスクを扱う際に、プロセスが制御された予測可能な方法で終了されることが保証されます。

たとえば、SIGTERMシグナルは安全なプロセス制御に適しており、プロセスが注意深く状態を保存して終了できるようにします。SIGKILLは実用的ですが、データ損失や破損を引き起こす可能性があるため控えめに使用すべきでしょう。

PIDでプロセスを強制終了する方法

終了したいプロセスのPIDを知っている場合、Linuxのkillコマンドを使用してシグナルを送信できます。基本的な構文は以下のとおりです。

kill [signal] PID

たとえば、デフォルトのSIGTERMシグナルとPID 1234でプロセスに終了を要求するには、以下を実行します。

kill -15 1234

プロセスがSIGTERMに応答しない場合は、SIGKILLシグナルを使用して強制的に終了してみてください。

kill -9 1234

特定のニーズに基づいて他のシグナルも送信できます。例:

kill -2 1234  # Sends SIGINT

kill -1 1234  # Sends SIGHUP

複数のプロセスを強制終了する方法

複数のプロセスを一度に終了する必要がある場合、killコマンドで複数のPIDにシグナルを送信することが可能です。方法は以下のとおりです。

kill [signal] PID1 PID2 PID3

PID 1234567891011のプロセスをSIGTERMで終了する例は以下のとおりです。

kill -15 1234 5678 91011

グループ内のすべてのプロセスにシグナルを送信するには、グループリーダーの負のPIDを使用します。

kill -15 -1234

PID 1234が率いるグループ内のすべてのプロセスが終了されます。

親プロセスを終了する際は注意が必要です。関連する子プロセスも終了する可能性があります。

pkillコマンドでプロセスを強制終了する方法

pkillコマンドはプロセス名でプロセスを終了でき、PIDでkillコマンドを使用するよりも多くの場合高速です。pkillの使用方法は以下のとおりです。

pkill [signal] [process name]

たとえば、nginxという名前のプロセスを終了するには、以下を実行します。

pkill -SIGTERM nginx

特定のユーザーが所有するプロセスを終了したい場合:

pkill -u john

たとえば、ターミナル pts/1に関連するプロセスを終了する場合:

pkill -t pts/1

特定のプロセスグループ内のすべてのプロセスも終了できます。たとえば、プロセスグループID(PGID)1234 の場合:

pkill -g 1234

プロセスの最新または最古のインスタンスを終了するには、以下を入力します。

pkill -n nginx  # Kill the newest instance of nginx

pkill -o nginx  # Kill the oldest instance of nginx

特定の基準に基づいてプロセスをマッチさせるために複数のオプションを組み合わせることもできます。たとえば、プロセスグループID(PGID)1234 のターミナル pts/1 でユーザー john のプロセスを一度に終了するには、以下を実行します。

pkill -u john -t pts/1 -g 1234

killallコマンドでプロセスを強制終了する方法

killallは名前ですべてのプロセスインスタンスを終了し、年齢、ユーザー、実行時間に基づいてプロセスをターゲットできます。

個別のプロセス用のkillや複数のプロセスインスタンスを選択的に管理するpkillと比較して、システム全体で同じ名前のプロセスを管理するのに理想的でしょう。

killallコマンドの基本構文は以下のとおりです。

killall [options] [process_name]

主な使用方法は以下のとおりです。

killall nginx  # Terminates all instances of nginx

killall -s SIGKILL nginx  # Forcefully kills all instances of nginx

killall -u john nginx  # Ends all nginx processes owned by the user john

特定の期間実行されているプロセスを終了したい場合:

killall -o 1h nginx

1時間以上実行されているすべてのnginxプロセスが終了されます。

特定のプロセスを除いてプロセスのすべてのインスタンスを終了する場合:

killall -v -I nginx

上記のコマンドで特定のnginxプロセスを終了から除外することが可能です。

さらに、CPUロードやメモリ使用量に基づいてプロセスを終了する場合:

killall -i -s SIGKILL nginx

各nginxプロセスを終了する前にインタラクティブなプロンプトを送信するため、各アクションを確認または拒否できます。

xkillコマンドでプロセスを強制終了する方法

xkillコマンドは、LinuxがインストールされたノートパソコンなどのGUIベース環境向けに設計されています。凍結したアプリケーションや標準的な終了コマンドに応答しないアプリケーションを簡単なクリックで終了できます。

xkillが便利なシナリオは以下のとおりです。

  • 応答しないアプリケーション:アプリケーションが応答しなくなり、標準的な方法で閉じることができない場合
  • 凍結したGUI要素:ウィンドウやダイアログなどの特定のGUI要素が凍結し、操作できない場合
  • 迅速な終了:PIDを調べることなく、特定のウィンドウやアプリケーションを迅速かつ簡単に終了する必要がある場合

xkillを使用するには、ターミナルで以下のコマンドを入力します。

xkill

コマンドを実行すると、マウスカーソルが×アイコンに変わります。その後、カーソルを応答しないアプリケーションのウィンドウに移動し、右クリックしてください。選択したプロセスが即座に終了されます。

または、応答しないアプリケーションのウィンドウIDを知っている場合は、以下を入力します。

xkill -id <window_id>

特定のウィンドウを直接ターゲットにして終了することが可能です。

xkillはクラスや名前による終了をネイティブでサポートしていないことにご注意ください。ただし、他のツールと組み合わせて使用することで、同様の結果を得られます。たとえば、wmctrlを使用してウィンドウとそのIDをリストし、適切なIDでxkillを実行しましょう。

wmctrlをインストールするには、以下を実行します。

sudo apt-get install wmctrl

完了したら、すべてのウィンドウとそのIDをリストします。

wmctrl -l

出力は以下のようになります。

0x03c00003  0  hostname  Firefox

0x04a00004  0  hostname  Terminal

0x05000005  0  hostname  Code

その後、目的のIDでxkillを実行します。例:

xkill -id 0x03c00003

topコマンドでプロセスを強制終了する方法

topコマンドは、リソース使用量と実行中のプロセスのリアルタイム、インタラクティブビューを提供します。過度なリソースを消費するプロセスや応答しなくなったプロセスを特定し、終了するのに便利でしょう。

前述のとおり、ターミナルでtopと入力して開始できます。プロセスのリストをナビゲートするには、矢印キーを使用してください。Shift + Pを押すとCPU使用量でプロセスがソートされ、Shift + Mを押すとメモリ使用量でソートされます。

...

PID USER      PR  NI VIRT    RES SHR S  %CPU %MEM     TIME+ COMMAND

1 root      20   0  169364   8824   6508 S   0.0  0.2   0:05.14 systemd

512 user      20   0  120364   6024   2508 S   1.0  0.1   0:02.04 firefox

789 user      20   0  140364   7624   3208 R   2.0  0.3   0:03.22 chrome

...

終了したいプロセスを特定したら、Kを押します。

topは、終了したいプロセスのPIDを入力するよう求めてくるので、その後、プロセスに送信するシグナルを指定する必要があります。

デフォルトのSIGTERMシグナルを送信するにはEnterを押すか、必要に応じて異なるシグナル番号を入力してください。

たとえば、PID 789chromeプロセスをSIGKILLで終了する場合:

k

PID to kill:789

Send signal (15):9

さらに、特定のユーザーが所有するプロセスを表示するには、以下のように-uオプションでtopを開始します。

top -u john

Fを押すことで、top内で表示される列をカスタマイズすることもできます。列を追加または削除し、異なる基準でソートが可能です。

まとめ

本記事では、killpkillkillallxkilltopコマンドなど、Linuxでプロセスを終了するさまざまな方法を扱いました。各コマンドは異なる機能を提供し、ニーズに応じて使用することが可能です。

プロセスを慎重に管理することは、システムパフォーマンスと安定性を維持するために不可欠です。こうしたコマンドに慣れることで、応答しないアプリケーションを効果的に処理し、リソース使用量を最適化できます。

最後に、終了するプロセスを常に確認し、偶発的なシステム問題を回避して、Linuxマシンがスムーズに動作することを確認してください。

Linuxのプロセス強制終了に関するよくある質問

ここでは、Linuxのプロセス強制終了に関する最も一般的な質問に回答します。

Linuxでどのプロセスを終了できますか?

Linuxでは、ユーザープロセスとシステムプロセスの両方を終了できます。ユーザーが所有するユーザープロセスは一般的に問題なく終了可能です。システムまたはrootユーザーが所有するシステムプロセスは、終了するためにroot権限が必要で、終了するとシステム障害を引き起こす可能性があるため、慎重に処理すべきでしょう。

killコマンドとkillallコマンドの違いは何ですか?

killコマンドはPIDが必要で特定のプロセスを終了するため、精密な制御に理想的です。一方、killallコマンドは名前でプロセスのすべてのインスタンスを終了し、システム全体で同じ名前のプロセスを管理するためのより大きな柔軟性を提供します。

終了したいプロセスのPIDはどのように見つけられますか?

pspidofpgrep、またはtopコマンドを使用してプロセスのPIDを見つけることができます。たとえば、ps auxpidof [process_name]pgrep [process_name]、またはtopを使用してプロセスIDと詳細をリストしてください。

Author
著者

Yūto Ōmura

イギリスから日本へ帰国後、翻訳者として8年従事。英国の大学ではメディア・映像を専攻し、以来、日英両言語にて10年以上複数のウェブサイトおよび動画メディアを運営。プライベートでは、料理をしたり、家族で小旅行に行ったりするのが好きです!