web-dev-qa-db-ja.com

暴力の少ないキル信号-HUP(1)-INT(2)と-TERM(15)の違い

最も激しいkill -9(SIGKILL)、他の3つの一般的な信号の違いがよくわかりません( こちら-HUP(1)、-INT(2)、および-TERM(15)。

どちらのシナリオで機能し、もう一方は機能しませんか?

一般に、いつ-9-KILL) 不合格?

私にとって、彼らはプロセスに優雅にを保存せずに終了するように要求するようです。厳しさを評価して、私は-HUP < -TERM < -INT < -KILL

36
Kenny

SIGKILLが失敗することはありません 実行中のプロセスを強制終了するには、それがポイントです。アプリケーションに反応する機会を与えるために、他のシグナルが存在します。

SIGINT、SIGTERM、SIGQUIT、SIGHUPのデフォルトの動作は、プログラムを強制終了することです。ただし、アプリケーションはこれらのシグナルのハンドラーをインストールできます。したがって、これらの信号を受信したときのアプリケーションの実際の動作は、システム設計ではなく、慣例の問題(各アプリケーションが従うかどうかに従わない)です。

SIGINTはロットの「最も弱い」です。その従来の意味は、「今行っていることをやめて、ユーザーの入力を待つ」ことです。それはによって生成された信号です Ctrl+C ターミナルで。非対話型プログラムは通常、SIGTERMのように扱います。

SIGTERMは「通常の」強制終了シグナルです。それはアプリケーションにきれいに終了するように伝えます。アプリケーションは、状態を保存するために時間がかかる可能性があります。一時ファイルなどのリソースが解放されるまでに時間がかかる場合があります。重要なアプリケーションの実行中に中断されたくないアプリケーションは、しばらくの間SIGTERMを無視する可能性があります。

SIGHUPは厳しいという点でSIGTERMとほぼ同じですが、ユーザーがその端末から切断したときに端末で実行されているアプリケーションに自動的に送信されるため、特定の役割があります(ユーザーが電話回線とモデムを介して接続していたため、語源的に)電話を切った)。明示的に送信する必要があるSIGTERMとは異なり、SIGHUPはしばしば自発的なものであるため、アプリケーションはSIGHUPに状態を保存する必要があります。 SIGHUPは、非ユーザー向けアプリケーション( daemons )に対してもまったく異なる従来の意味を持ちます。これは、構成ファイルをリロードすることです。

SIGQUITは無視できる信号の中で最も過酷です。これは、アプリケーションが正常に動作しておらず、今すぐ強制終了する必要がある場合に使用することを意図しており、デフォルトでは伝統的に core dump ファイル(ほとんどのユーザーがコアファイルの傾向を知らない最新のシステム)を残しましたデフォルトでは生成されません)。アプリケーションはハンドラーを設定できますが、SIGQUITの意図は何かが深刻な問題であるときに使用されるため、ハンドラーを設定することはほとんどありません(特に状態を保存しないでください)。