永久にプロセスを終了しようとする場合、「kill」のオプションはどれを使用すべきですか?


26

私は人々から多くの混合メッセージを受け取っており、実際にあなたが使用するものに大きな違いはないのだろうかと思っていました。

kill 'x'
killall 'x'
kill -9 'x'

これらは私がこれまでに使用するように言われたいくつかのオプションですが、一部の人々は、キル-9は単に過剰であり、キル自体は機能しないなどと言います。

プロセスを終了するだけの最も標準的な場合(したがって、その状態も同様)に使用すべきアドバイスはありますか?

[編集]プロセスの実行を停止して、最初から新しいプロセスを実行できるようにする場合に使用するものを探しています


1
虐待に対して警告するUUK9フォームレターも参照してくださいSIGKILL
jw013

1
すべての異なる信号をそれらの番号とともにリストする:kill -lおよび番号を対応する信号名に変換するには、たとえばkill -l 9を返しKILLます。

回答:


24

デフォルトの処理でプロセスを終了するシグナルが多数あります。最終的な終了シグナルはSIGKILLです。これは処理できず、プロセスが停止する以外に選択肢がないためです。ただし、これを送信すると、プロセスはクリーンアップの機会を失います。したがって、適切な方法では、SIGTERMのようなシグナルを送信する必要があります。このシグナルは、SIGKILLを送信してしばらく経ってもプロセスが終了しない場合にのみ処理できます。

SIGINTとSIGQUITは、任意のプロセス終了の良い候補ではないことに注意してください。これらは端末のキーボードから生成できるため、多くのアプリケーションは特別な目的で使用します。たとえば、pythonインタープリターはSIGINTを使用してKeyboardInterrupt例外を生成し(対話型のpythonセッションでも単にプロンプ​​トに戻る)、JVMはSIGQUITを使用してスタックトレースをダンプします。SIGINTとSIGQUITは最も標準的なコマンドラインなどのユーティリティのための有効なままですfindcat

システムのシャットダウン中に、ほとんどのUNIXおよびLinuxシステムはすべてのプロセスにSIGTERMを送信し、5秒待機してからSIGKILLを送信します。これは、任意のプロセスを安全にシャットダウンするための推奨される方法です。

また、SIGKILLでさえ、プロセスが起動するまで、割り込み不能な待機状態にあるプロセスを終了しない場合があることに注意してください。


1
素晴らしい答え。kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;推奨事項のリファレンスはありますか?
-l0b0

+1種類の答え。そして、SIGHUPはどうですか?
アロイスマーダル

2
@AloisMahdal:SIGHUPダイヤルアップ回線が一般的だった日から来ています。その信号は、回線がハングしたことを示すために送信されました。後で、それがあまり一般的ではなかったときに、SIGHUPデーモンがプロセスを再起動せずに構成ファイルを再読み取りするために時々使用しました。これらの現代でSIGHUPはめったに使用されません。多くのデーモンは、すなわち(再初期化、の独自の方法がありますapachectl gracefulかをrndc reconfig使用する必要がありません事について。[init.d|smf|upstart|launchd]可能性を制御します。
bahamat

13

最も穏やかなものから始めて、そこからエスカレートする必要があります。これは、SIGINT、SIGTERM、SIGQUIT、SIGKILLを意味します。ほとんどの人はSIGINTとSIGQUITをスキップしますが。


さらに、一部のアプリケーション(JDKなど)はSIGQUITを異なる方法で処理します。特定のアプリケーションがそれを処理する方法を知らない限り、おそらくSIGQUITを使用しないでしょう。
-dimo414
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.