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

Linuxでは、実行中のプロセス管理がシステムパフォーマンスと安定性を保つ重要な要素となります。応答しないプロセスや異常な動作をするプロセスに遭遇した場合、さまざまなコマンドを使って強制終了することが可能です。
Linuxでプロセスを強制終了するには、killコマンドを使用してプロセスID(PID)またはプロセス名を指定します。killコマンドはプロセスにシグナルを送信し、終了を要求したり強制的に停止させることができます。
さらに、killallやpkillといった他のコマンドもプロセス名を基にしたプロセス終了を可能にし、複数のプロセスを同時に終了させる優れた柔軟性があります。
各コマンドにはそれぞれ異なるシグナル送信オプションがあり、プロセスを穏やかに終了させるか強制的に停止させるかを選択できます。本記事では、こうしたコマンドを詳しく解説し、さまざまなシナリオで効果的に使用する方法を紹介していきます。
前提条件
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 1234、5678、91011のプロセスを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 789のchromeプロセスをSIGKILLで終了する場合:
k
PID to kill:789
Send signal (15):9
さらに、特定のユーザーが所有するプロセスを表示するには、以下のように-uオプションでtopを開始します。
top -u john
Fを押すことで、top内で表示される列をカスタマイズすることもできます。列を追加または削除し、異なる基準でソートが可能です。
まとめ
本記事では、kill、pkill、killall、xkill、topコマンドなど、Linuxでプロセスを終了するさまざまな方法を扱いました。各コマンドは異なる機能を提供し、ニーズに応じて使用することが可能です。
プロセスを慎重に管理することは、システムパフォーマンスと安定性を維持するために不可欠です。こうしたコマンドに慣れることで、応答しないアプリケーションを効果的に処理し、リソース使用量を最適化できます。
最後に、終了するプロセスを常に確認し、偶発的なシステム問題を回避して、Linuxマシンがスムーズに動作することを確認してください。
Linuxのプロセス強制終了に関するよくある質問
ここでは、Linuxのプロセス強制終了に関する最も一般的な質問に回答します。
Linuxでどのプロセスを終了できますか?
Linuxでは、ユーザープロセスとシステムプロセスの両方を終了できます。ユーザーが所有するユーザープロセスは一般的に問題なく終了可能です。システムまたはrootユーザーが所有するシステムプロセスは、終了するためにroot権限が必要で、終了するとシステム障害を引き起こす可能性があるため、慎重に処理すべきでしょう。
killコマンドとkillallコマンドの違いは何ですか?
killコマンドはPIDが必要で特定のプロセスを終了するため、精密な制御に理想的です。一方、killallコマンドは名前でプロセスのすべてのインスタンスを終了し、システム全体で同じ名前のプロセスを管理するためのより大きな柔軟性を提供します。
終了したいプロセスのPIDはどのように見つけられますか?
ps、pidof、pgrep、またはtopコマンドを使用してプロセスのPIDを見つけることができます。たとえば、ps aux、pidof [process_name]、pgrep [process_name]、またはtopを使用してプロセスIDと詳細をリストしてください。