[解決済み] SIGINTと他の終了信号(SIGTERM、SIGQUIT、SIGKILL)との関連はどうなっていますか?
質問
POSIXシステムでは、終了信号は通常次のような順序になります(多くのMANページやPOSIX Specによると)。
-
SIGTERM - 丁寧にプロセスの終了を要求する。すべてのリソース (ファイル、ソケット、子プロセスなど) をクリーンアップし、一時ファイルなどを削除し、優雅に終了するものとする。
-
SIGQUIT - より強制的な要求。クリーンアップが絶対に必要なリソースをクリーンアップしますが、一時ファイルを削除しないかもしれませんし、どこかにデバッグ情報を書き込むかもしれません; いくつかのシステムでは、コアダンプも書き込まれます (シグナルがアプリによってキャッチされたかどうかにかかわらず)。
-
SIGKILL - 最も強制的な要求です。プロセスは何もするように要求されませんが、システムは好むと好まざるとにかかわらず、プロセスをクリーンアップします。ほとんどの場合、コア ダンプが書き込まれます。
SIGINT はどのようにこの絵にフィットするのでしょうか。CLI プロセスは通常、ユーザーが CRTL+C を押したときに SIGINT によって終了しますが、バックグラウンド プロセスは KILL ユーティリティを使用して SIGINT によって終了させることもできます。SIGINT が SIGTERM よりも強力かどうか、あるいは SIGINT と SIGTERM の間にまったく違いがあるかどうかは、仕様書やヘッダー ファイルを見てもわかりません。
UPDATEしました。
私がこれまでに見つけた終端信号に関する最良の記述は GNU LibC ドキュメンテーション . SIGTERMとSIGQUITの間に意図した違いがあることがよく説明されています。
SIGTERMについて書かれています。
プログラムの終了を丁重に依頼するための通常の方法です。
と、SIGQUITについて書かれています。
[...] そして、プログラムエラー信号のように、プロセスを終了させるときにコアダンプを生成します。 これは、ユーザーによって「検出された」プログラムエラーの状態であると考えることができます。[...] ある種のクリーンアップは、SIGQUITの処理では省略した方がよい。例えば、もしプログラムが 一時ファイルを作成する場合、一時ファイルを削除することで他の終了要求を処理する必要があります。 を削除することで他の終了要求を処理する必要があります。しかし、SIGQUITはそれらを削除しない方が良いのです。 コア ダンプと一緒に調べることができます。
そして、SIGHUPも十分に説明されています。SIGHUP は実際には終了信号ではなく、ユーザーとの "接続" が失われたことを意味するだけなので、アプリはユーザーがこれ以上の出力 (stdout/stderr 出力など) を読むことを期待できず、ユーザーからこれ以上期待する入力もありません。ほとんどのアプリは、終了したほうがよいということになります。理論的には、アプリはSIGHUPを受信するとデーモンモードになり、バックグラウンドプロセスとして実行され、設定されたログファイルに出力を書き込むと決定することも可能です。すでにバックグラウンドで実行されているほとんどのデーモンでは、SIGHUP は通常、設定ファイルを再調査することを意味するので、設定ファイルを編集した後にバックグラウンド プロセスに送信します。
しかし、このページには、SIGINT が CRTL+C によって送信されるということ以外に、有用な説明がありません。SIGTERM とは異なる方法で SIGINT を処理する理由はあるのでしょうか。もしそうなら、それはどのような理由で、どのように処理が異なるのでしょうか?
どのように解決するのですか?
SIGTERM と SIGKILL は、汎用の "terminate this process" 要求を対象としています。 SIGTERM (デフォルト) と SIGKILL (常に) はプロセスの終了を引き起こします。 SIGTERM はプロセスによって捕捉されたり (たとえば、プロセス自身がクリーンアップを行いたい場合など)、完全に無視されることがありますが、SIGKILL は捕捉したり無視したりすることはできません。
SIGINT と SIGQUIT は、特に端末からの要求を意図したもので、特定の入力文字をこれらの信号を生成するために割り当てることができます (端末制御設定に依存します)。 SIGINT のデフォルトの動作は、SIGTERM のデフォルトの動作および SIGKILL の変更できない動作と同じ種類のプロセス終了です。SIGQUIT のデフォルトの動作もプロセス終了ですが、コアダンプの生成など、実装で定義された追加の動作が発生する場合があります。 SIGQUIT のデフォルトの動作もプロセスの終了ですが、コアダンプの生成など、実装で定義された追加の動作が発生する場合があります。
SIGHUP は、おっしゃるとおり、終了信号というよりも、端末接続が切れたことを示すためのものです。 しかし、繰り返しになりますが、SIGHUP のデフォルトの動作は (プロセスがそれをキャッチまたは無視しない場合) SIGTERM などと同じようにプロセスを終了させることです .
の中にテーブルがあります。
POSIX
の定義に
signal.h
は、様々なシグナルとそのデフォルトのアクションと目的をリストアップしている
一般的な端末のインターフェイス
の章では、ターミナル関連のシグナルについてより詳しく説明しています。
関連
-
Linux sarコマンドによるシステム性能の詳細解析事例
-
deepinシステムからログアウトする方法は?deepinシステムからログアウトし、ユーザーを切り替える方法
-
Linux NICがRTNETLINK answersというエラーで起動できない場合、どうすればよいですか?ファイルが存在するか?
-
Linux Mintで入力メソッドを削除する方法は?Linux Mintで冗長な入力メソッドを削除するためのヒント
-
deepin20を使って、ドローイングボードで画像を開くには?deepinのお絵かき掲示板で画像を開く2つの方法
-
deepin20のデフォルトブラウザを設定するには?deepinにデフォルトブラウザを追加するためのヒント
-
deepin20のデスクトップアイコンのスタイルを変更する方法は?deepinのアイコンテーマを変更するためのヒント
-
エラーの解決方法 お客様のバージョンは /bin/bash: java: コマンドが見つかりませんでした。
-
[解決済み] 標準エラー出力を /dev/null にリダイレクトする。
-
[解決済み] Unix/Linuxで、ファイルのあるフォルダを別のフォルダにコピーするにはどうしたらいいですか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux sarコマンドによるシステム性能の詳細解析事例
-
deepin20のファイルを共有する方法を教えてください。Windowsでdeepinファイルを共有するためのヒント
-
deepin linuxでroot権限に切り替えるには?Deepinでrootに切り替えるためのヒント
-
Linux Mint システムの背景画像を変更する方法は? Linuxでデスクトップの背景を変更するためのヒント
-
エラーの解決方法 お客様のバージョンは /bin/bash: java: コマンドが見つかりませんでした。
-
apache startup error (98) Address already in use: make_sock: could not bind to...
-
[解決済み] Linuxでデータファイルから最初の列(実際には行名)を削除する方法は?
-
[解決済み] cronは内部でどのようにジョブをスケジューリングしているのですか?
-
[解決済み] mkdirのオプションが明確でない
-
[解決済み] ls を使用してディレクトリとその合計サイズを一覧表示する