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


32

最も暴力的なkill -9(SIGKILL)を別にすれば、他の3つの一般的なシグナル(ここ-HUP(1)、-INT(2)、および-TERM(15)の違いはよくわかりません。

どちらのシナリオで機能し、他のシナリオは機能しませんか?

一般的に-9-KILL)が失敗するのはいつですか?

私には、彼らが終了するために、プロセスを頼むように見える優雅に保存せずに。厳しさを評価すると、私は入れ-HUP < -TERM < -INT < -KILLます。


HUPプログラムが終了するとは限りません。一部のプログラムはSIGHUP、構成ファイルの再読み込みに使用します。SIGKILLプロセスが割り込み不可能なスリープ状態にある場合、失敗するか、むしろ延期されます。
ムル

回答:


52

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

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

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

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

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

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


「状態を保存する」ことについて詳しく説明していただけますか?テキストエディタを使用していて、それを強制終了した場合、コンテンツは保存されていません。
ケニー

2
@Kennyほとんどの編集者はファイルを保存しません。保存するつもりのない一時的な変更を行った可能性があるためです。高度なエディタ(vi、emacsなど)には、時々データを保存する自動保存ファイルがあります。SIGHUPでは、通常、自動保存ファイルが最新であることを確認します。
ジル 'SO-悪である停止'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.