- プロセスを強制終了するとは、プロセスを強制的に終了させることであり、プロセスが応答しない場合や動作が異常な場合に必要になることがあります。
- Linux と macOS には、PID または名前でプロセスを終了できる kill、pkill、および killall などのコマンドがあります。
- プロセスを強制終了する際には注意して、予期しない結果を避けるために正しいプロセスを終了していることを確認することが重要です。
プロセスを強制終了することは、プロセスを取り除く唯一の方法である場合があります。その過激な名前にもかかわらず、プロセスを「強制終了」することは「強制的に終了させる」ことを意味するだけです。Linux または macOS のコマンドラインからプロセスを強制終了する方法を説明します。
プロセスとは何か?
Web ブラウザーなどの実行中のプログラム、デスクトップ環境に関連付けられたバックグラウンドプロセス、および Linux システムサービスはすべてプロセスです。
プロセスを 2 つのグループに分類できます。
- フォアグラウンドプロセスは、ユーザーが開始または起動したプロセスです。これらは端末ウィンドウ内にある場合もあれば、グラフィカルアプリケーションである場合もあります。
- バックグラウンドプロセスは、自動的に開始され、ユーザーとやり取りしないすべてのプロセスです。これらはユーザーからの入力を想定しておらず、ユーザーに結果や出力を提示しません。バックグラウンドプロセスには、サービスやデーモンなどのものがあります。
フォアグラウンドプロセスが劇場スタッフと俳優の最前線である場合、バックグラウンドプロセスは舞台裏の「舞台裏」チームです。
プロセスが動作不良を起こしたり、誤動作を起こしたりすると、CPU 時間を独占したり、RAM を消費したり、厳密な計算ループに入って応答しなくなったりすることがあります。グラフィカルアプリケーションはマウスのクリックに応答しなくなる可能性があります。端末アプリケーションはコマンドプロンプトに戻らない場合があります。
プロセスを強制終了するとどうなるか?
プロセスを「強制終了」することは、「プロセスを強制的に終了させる」ことを意味するだけです。これは、プロセスが応答を拒否している場合に必要になる場合があります。
Linux には、kill
、pkill
、および 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
に渡す前に、検索用語を正しく考えていることを確認できます。pkill
と pgrep
はどちらも、検索用語を同じ方法で扱います。その扱いは非常に似ており、同じマニュアルページを共有しています。
名前の中に「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 を再起動する必要があるか、終了したプロセスに関連付けられたプログラムで行った作業を失う可能性があるということです。
コメントする