Linux ターミナルからプロセスを強制終了する方法

  • プロセスを強制終了するとは、プロセスを強制的に終了させることであり、プロセスが応答しない場合や動作が異常な場合に必要になることがあります。
  • Linux と macOS には、PID または名前でプロセスを終了できる kill、pkill、および killall などのコマンドがあります。
  • プロセスを強制終了する際には注意して、予期しない結果を避けるために正しいプロセスを終了していることを確認することが重要です。

プロセスを強制終了することは、プロセスを取り除く唯一の方法である場合があります。その過激な名前にもかかわらず、プロセスを「強制終了」することは「強制的に終了させる」ことを意味するだけです。Linux または macOS のコマンドラインからプロセスを強制終了する方法を説明します。

プロセスとは何か?

Web ブラウザーなどの実行中のプログラム、デスクトップ環境に関連付けられたバックグラウンドプロセス、および Linux システムサービスはすべてプロセスです。

プロセスを 2 つのグループに分類できます。

  • フォアグラウンドプロセスは、ユーザーが開始または起動したプロセスです。これらは端末ウィンドウ内にある場合もあれば、グラフィカルアプリケーションである場合もあります。
  • バックグラウンドプロセスは、自動的に開始され、ユーザーとやり取りしないすべてのプロセスです。これらはユーザーからの入力を想定しておらず、ユーザーに結果や出力を提示しません。バックグラウンドプロセスには、サービスやデーモンなどのものがあります。

フォアグラウンドプロセスが劇場スタッフと俳優の最前線である場合、バックグラウンドプロセスは舞台裏の「舞台裏」チームです。

プロセスが動作不良を起こしたり、誤動作を起こしたりすると、CPU 時間を独占したり、RAM を消費したり、厳密な計算ループに入って応答しなくなったりすることがあります。グラフィカルアプリケーションはマウスのクリックに応答しなくなる可能性があります。端末アプリケーションはコマンドプロンプトに戻らない場合があります。

プロセスを強制終了するとどうなるか?

プロセスを「強制終了」することは、「プロセスを強制的に終了させる」ことを意味するだけです。これは、プロセスが応答を拒否している場合に必要になる場合があります。

Linux には、killpkill、および killall コマンドが用意されており、それを使用するとプロセスを強制終了できます。これらのコマンドは、グラフィカルまたはコマンドライン、フォアグラウンドまたはバックグラウンドなど、あらゆるタイプのプロセスで使用できます。

kill コマンド

kill を使用するには、終了するプロセスのプロセス ID (PID) を知っている必要があります。ps コマンドを使用して、プロセスの PID を見つけることができます。

ps ですべてのプロセスを検索するには、-e (すべてのプロセス) オプションを使用します。出力を less でパイプ処理することをお勧めします。かなり多くの出力があります。ps、スペース、-e、スペース、| (パイプ文字)、別のスペース、次に less と入力します。Enter キーを押してコマンドを実行します。

ps -e | less

これにより、以下のスクリーンショットに似たプロセスの一覧が表示されます。less の中で / キーを使用して前方検索したり、? キーを使用して後方検索したりできます。

終了するプロセスに注目するには、ps の出力を grep でパイプ処理し、プロセスの名前 (または名前の一部) を指定します。

ps -e | grep shutter

終了するプロセスの PID を見つけたら、それをパラメーターとして kill コマンドに渡します。前のコマンドで特定された shutter プロセスを終了するには、次のコマンドを使用します。

kill 2099

kill コマンドはサイレントアサシンです。成功したかどうかはフィードバックされません。

macOS でプロセスを強制終了する場合にも同じように機能します。

pkill コマンド

pkill コマンドを使用すると、名前でプロセス (またはプロセス) を強制終了できます。PID でプロセスを特定する必要はありません。pkill を使用するには、pkill が実行中のプロセスのリストと照合するために使用する検索用語を指定します。一致するプロセスは終了します。そのため、その検索用語のスペルが正しいことを確認する必要があります。

セーフティネットとして、pkill コマンドを使用する前に pgrep コマンドを使用できます。pgrep コマンドも検索用語を受け入れます。検索用語と一致する各プロセスの PID が一覧表示されます。これは、pgrep はプロセスにキルシグナルを発行しないため安全であり、検索用語を誤入力しても別のプロセスを誤って強制終了することはありません。pkill に渡す前に、検索用語を正しく考えていることを確認できます。pkillpgrep はどちらも、検索用語を同じ方法で扱います。その扱いは非常に似ており、同じマニュアルページを共有しています。

名前の中に「subq」という文字列を持つプロセスがあるとします。ps -u dave | grep コマンドを使用して、その裏を覗いてみましょう。「subq」がそのプロセスと、そのプロセスだけに一致することがわかります。これは、プロセスの完全な名前を確認するためだけのものでした。

ps -u dave | grep subq

ユーザーがそれを行っていないと仮定しましょう。ユーザーが知っているのは、プロセス名が「subq」という部分文字列を含むということだけです。ユーザーは pgrep を使用して、検索用語に一致するものが 1 つだけであることを確認します。その後、ユーザーは pkill でその検索用語を使用します。

pgrep subq

pkill subq

pkill を使用して、一度に複数のプロセスを強制終了できます。ここでは、ユーザーは pgrep を実行して、Chrome が起動したプロセスの数をチェックしています。ユーザーは pkill を使用してそれらをすべて強制終了します。その後、ユーザーは pgrep を使用して、それらがすべて削除されたことを確認します。

pgrep chrome

pkill chrome

pgrep chrome

同じ名前のプロセスが複数実行されているが、すべてを強制終了したくない場合は、pgrep-f (コマンドライン) オプションを使用して、どのプロセスがどれであるかを識別できます。簡単な例としては、2 つの ping プロセスがあります。1 つを強制終了したいが、もう 1 つは強制終了したくないとします。コマンドラインを使用してそれらを区別できます。コマンドラインパラメーターを囲むために引用符を使用することに注意してください。

pgrep -f "ping 192.168.4.22"

pkill -f "ping 192.168.4.22"

killall コマンド

警告: Solaris および OpenIndiana オペレーティングシステムでは、killall コマンドはユーザーに属するすべてのプロセスを強制終了します。root である場合、または sudo killall を発行した場合、コンピューターが再起動します。この資料の調査中、この動作は OpenIndiana Hipster 2018.10 の最新バージョンで確認されました。

killall コマンドは pkill コマンドと同様の方法で動作しますが、特定の違いがあります。コマンドに検索用語を渡す代わりに、正確なプロセス名を入力する必要があります。

プロセス名に部分一致を指定することはできません。次のように、プロセス名を全体指定する必要があります。

killall shutt

killall shutter

-y (若い) オプションを使用すると、指定した期間よりも短く実行されているプロセスを強制終了できます。期間は、数字の後に次のいずれかの単位を指定します。

  • s (秒)
  • m (分)
  • h (時間)
  • d (日)
  • w (週)
  • M (月、注意: 大文字「M」)
  • y (年)

起動したばかりの ana という名前のプロセスを強制終了し、ana の古いインスタンスは実行されたままにするには、2 分以内に反応した場合、killall で次のパラメーターを使用できます。

killall -y 2m ana

-o (古い) オプションを使用すると、指定した期間よりも長く実行されているプロセスを強制終了できます。このコマンドは、1 日以上実行されているすべての ssh 接続を強制終了します。

killall -o 1d sshd

どのプロセスでも強制終了できますか?

これらのコマンドを使用すると、誤ったプロセスを正確かつ安全に識別して終了できます。ただし、あまりにもトリガーハッピーになって、本来は強制終了すべきではないプロセスを終了してしまう可能性があります。

常に慎重になってください。まず、強制終了しようとしているプロセスが本当に強制終了したいプロセスであることを確認してください。次に、もう一度確認してください。ターゲットのプロセスが終了したいプロセスであることを注意深く確認してください。満足したら、プロセスの終了に進みます。

プロセスを誤って終了した場合でも、世界が終わるわけではありません。最も可能性の高い結果は、何かがバグになり、PC を再起動する必要があるか、終了したプロセスに関連付けられたプログラムで行った作業を失う可能性があるということです。