SIGKILL(およびSIGTERM)を指定されたプロセスに明示的に送信する必要がありますか?

SIGKILL(およびSIGTERM)を指定されたプロセスに明示的に送信する必要がありますか?

読むザイルズの答え

SIGHUPは、重大度の点でSIGTERMとほぼ同じですが、ユーザーが端末との接続を切断したときに端末で実行されているアプリケーションに自動的に送信されるという点で特定の役割を果たします。回線が切れました)。 SIGHUPは一般的に非自発的であり、以下に関連しています。SIGTERMは明示的に送信する必要があります。したがって、アプリケーションはSIGHUPに状態を保存しようとする必要があります。

「SIGTERMは明示的に送信する必要があります」の「明示的」とは、SIGTERMが最初にプロセス(カーネルではなく)によるプロセス呼び出しを介して送信される必要があることを意味しますかkill()

SIGKILLを指定されたプロセスに明示的に送信する必要があるかどうか疑問に思います。カーネルは暗黙的にプロセスにSIGKILLまたはSIGTERMを送信できますか?

オペレーティングシステムがシャットダウンすると、カーネルが実行中のプロセスにシグナルを送信してシャットダウンしますか?何の信号ですか?カーネルは暗黙的にそれを送信しますか?

ありがとうございます。

ベストアンサー1

私が知る限り、LinuxカーネルはSIGTERM自分自身をユーザープロセスに送りません。 (SIGTERMカーネルスレッド内で使用:カーネルがカーネルスレッドに停止を要求する方法です。)

多くの場合、カーネルはSIGKILL独自にユーザープロセスにメッセージを送信します。例えば、OOMキラーSIGKILLいくつかのターゲットを殺すために。カーネルエラーその結果、SIGKILLさまざまなメモリエラーが発生する可能性がありますSIGKILL

いつ。 。 。いつオペレーティングシステムSIGTERMプロセスを閉じて使用して終了しますSIGKILLが、これらのシグナルはカーネルからは出ません(または呼び出しから直接は出ません)。kill()pidが0または負のpidの場合、カーネルは複数のプロセスにシグナルを送信します。これは、サービスを終了するサービス管理者と、システム管理メカニズムの一部であるさまざまな最後の方法ですべてを終了するアプリケーションモードプログラムで発生します。killprocsVan Smulenbergのrc脚本、これkillprocsOpenRCスクリプト、しかもsystemd-shutdownプログラム

いつ。 。 。いつコア終了または再起動してもプロセスに気を付けずに終了しません(参照reboot()詳しくはこちらをご覧ください。LINUX_REBOOT_CMD_RESTART2システムコールバリアントを無視すると、コマンド引数を使用して処理できません。

おすすめ記事