プロセスの終了は、Linuxのプロセス管理の重要な部分です。
プロセス管理はそれ自体のトピックであるため、この投稿ではユーザープロセスの管理と信号処理の詳細については説明しません。
プロセスを終了するためにSIGTERMおよびSIGKILLシグナルを使用することに焦点を当てます。また、SIGKILLの使用を避けるべき理由についても説明します。
SIGTERMとは何ですか?
UNIXライクなシステムでは、SIGTERMシグナルはプログラムを終了するために使用されます。 SIGnalとTERMinateで構成されている名前から推測できます。
SIGTERMは、SIGTERM信号を受信するプロセスがそれを無視することを選択する可能性があるため、ソフトキルと呼ばれることもあります。
言い換えれば、それはプロセスを殺すための丁寧な方法です。
LinuxのプロセスにSIGTERMを送信する方法
Linuxのkillコマンドは、そのようなすべての信号をプロセスに送信するために使用されます。
デフォルトでは、killコマンドはSIGTERMシグナルを送信します。 -15で明示的に言及することもできますが、それは冗長です。
このコマンドを次のように使用するには、プロセスのpidを知る必要があります。
kill <process_id>
Linuxでpsコマンドを使用して、プロセスIDを取得できます。
SIGKILLとは何ですか?
SIGKILLは、プロセスの即時終了に使用されます。この信号は無視したりブロックしたりすることはできません。プロセスは、スレッド(存在する場合)とともに終了します。
これはプロセスを強制終了する残忍な方法であり、最後の手段としてのみ使用する必要があります。閉じたい応答のないプロセスがあるとします。このような場合、SIGKILLを使用できます。
LinuxのプロセスにSIGKILLを送信する方法
オプション-9を使用して、killコマンドでSIGKILLシグナルを送信し、プロセスをすぐに強制終了できます。
kill -9 <process_id>
SIGTERMとSIGKILL:SIGKILLよりもSIGTERMを使用する方がよいのはなぜですか?
これらの信号は両方ともプロセスを強制終了するために使用されますが、2つの間にいくつかの違いがあります:
- SIGTERMはプロセスを正常に強制終了しますが、SIGKILLはプロセスをただちに強制終了します。
- SIGTERMシグナルは処理、無視、ブロックできますが、SIGKILLは処理またはブロックできません。
- SIGTERMは子プロセスを強制終了しません。 SIGKILLは子プロセスも強制終了します。
一部のLinuxユーザーは、「kill -9」を使用する習慣がありますが、これは避ける必要があります。応答しないプロセスがない限り、SIGKILLを使用する必要はありません。
SIGTERMを使用すると、プロセスはその親プロセスと子プロセスに情報を送信する時間を取得します。その子プロセスはinitによって処理されます。
SIGKILLを使用すると、強制終了されたプロセスがその親プロセスに強制終了シグナルを受信したことを通知する機会がないため、ゾンビプロセスが作成される可能性があります。
ターンオフのこの漫画は、SIGTERMとSIGKILLの違いをユーモラスに説明しています。
SIGTERMまたはSIGKILLを使用してプロセスを強制終了する方法について理解を深めていただければ幸いです。
ご質問やご提案がございましたら、お気軽にコメントをお寄せください。