フォローアップとしてこれ質問、(4)(下記の引用)が私が到達できる最も遠い距離であることが正しいですか?
私のアプリケーション(systemdデーモンとして実行される.NETアプリケーション)でkill(sigaction呼び出し)を実行すると、プロセスに送信されるカーネル信号を傍受してkill要求を無視します。
免責事項は、ユーザー呼び出しがシグナルkill
番号を省略した場合、またはキャプチャ可能なシグナル(例:デフォルトシグナルSIGTERM
)を使用している場合にのみ適用されます。
ユーザーがSIGKILL
(-9)または他のキャプチャできないシグナルを使用してkillを呼び出す場合も、不十分です。
上記の仮定は正しいですか?
答え1
はい、これは正常です。多くのプログラムが独自の信号を捕捉して処理します。たとえば、一般的なものは次のとおりです。
- SIGTERM、SIGINT、および/またはSIGQUITをキャプチャしてから、開いているすべてのファイルをフラッシュして閉じます。さもなければ、ただ死ぬのではなく、清潔でエレガントに閉じます。
- SIGHUPをキャプチャして設定ファイルを再ロードするか、すべてのログファイルを閉じて再度開きます。または、SIGHUPをSIGTERMのように処理します。
- 他の捕捉可能な信号を適切に捕捉し処理する。結局、それはすぐに実行中のプログラムに信号を送る別のプロセスのためのものです。プログラマの要件に応じて、信号受信プロセスはそれを処理または無視します(未処理の場合はSIGTERMで終了するなどの基本的な結果を生成することもできます)。