web-dev-qa-db-ja.com

プロセスを永久に終了させようとする場合、「kill」のどのオプションを使用する必要がありますか?

いろいろな人からメッセージが入り混じっていますが、実際に使っているものに大きな違いはないのではないかと思っていました。

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

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

プロセスを終了するだけの最も標準的なケース(したがってその状態も)でどちらを使用すべきかについて誰かがアドバイスを持っていますか?

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

26
Chuck Testa

デフォルトの処置がプロセスの終了であるシグナルがいくつかあります。最終的な終了信号はSIGKILLです。これは処理できず、プロセスは死ぬしかありません。ただし、これは、送信すると、クリーンアップする機会がプロセスから奪われることも意味します。したがって、適切な方法では、最初に処理できるSIGTERMのようなシグナルを送信する必要があり、しばらくしてプロセスが終了しない場合にのみ、SIGKILLを送信します。

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

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

また、SIGKILLでさえ、プロセスがウェイクアップするまで無停電の待機状態で停止しているプロセスを終了できない場合があることに注意してください。

24
Adam Zalcman

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