Linuxプログラミングインタフェースは次のように言います。
TASK_KILLABLE:この状態はTASK_UNINTERRUPTIBLEに似ていますが、次の場合にプロセスを起動します。致命的な信号(すなわち、プロセスを終了すること)が受信される。この状態を使用するようにカーネルコードの関連部分を切り替えると、中断されたプロセスでシステムを再起動する必要があるさまざまな状況を回避できます。代わりに、致命的なシグナルを送信してプロセスを終了できます。 TASK_KILLABLEを使用するために変換する最初のカーネルコード部分はNFSです。
致命的なシグナルはTASK_KILLABLE状態のプロセスを起動できますが、TASK_UNINTERRUPTIBLE状態のプロセスは起動できません。
致命的な信号はSIGKILLだけを意味しますか、それともSIGTERM、SIGHUP、SIGQUIT、SIGINT、または...も意味しますか?
答え1
ほとんどの信号は基本的に致命的です。どんな信号でもリスト基本的なタスク「終了」または「コアダンプ」は、無視または明示的に処理しない限り、致命的です。これにはSIGUSR1
、もちろんのような「ポジティブ」シグナルが含まれます。SIGKILL
SIGTERM
これはLinuxカーネルと一致します。定義致命的な信号の場合:
- これは、カーネルの観点から無視される信号のいずれか、または停止信号のいずれかではありません。つまりそれぞれ
SIGCONT
、、、、SIGCHLD
SIGWINCH
SIGURG
一方では、そしてSIGSTOP
、、、、そして一方でSIGTSTP
はSIGTTIN
SIGTTOU
; - 対応するシグナルハンドラはデフォルトハンドラでなければなりません。
したがって、致命的なシグナルはプロセスを終了します(実行中のプログラムで指定されたハンドラを介していません)。