SIGKILL以外の信号でそれを強制終了すると、シグナルが送信されます。これはマスクすることも無視することもできますが、そうでない(またはマスクされていない)と仮定すると、プログラムの通常の実行を中断します。
IPCタイプのシステムコール(例えば、ソケットからの読み取り、select()、poll()、sleep()など)が中断され、errnoのEINTRで失敗します。適切に書かれたアプリケーションは、信号を処理した後にコールを再発行します。
このプロセスは、シグナルハンドラへの呼び出しをすぐに実行します。シグナルハンドラは、処理を続行できるように戻るか、longjmp(C言語)を呼び出すか、プロセスを終了します。通常はデフォルトです。
SIGKILLはまったく異なりますが、上記のいずれも発生しません。その代わりに、システムコールを終了するだけです(EINTRがプロセスを読み込めるようになっている場合は、errnoにEINTRが残っていると思われます)。
しかし、私は "D" "中断されないスリープ"状態が終了するのを待っていると思います。これは通常、ブロックディスク読み取り、ページフォールト要求負荷などのようなものです。
こんにちはJoeslice、私はカーネルの面でもっと尋ねました、誰がSIGINTを選ぶでしょう、カーネルの "Mr. ABC process"が信号を受け取ったときに何がすべて画像に入りますか? –
いいえ、 'kill'はデフォルトで' SIGTERM'を送ります。これは 'SIGINT'ではなく、終了するシグナルです –
@ChristofferHammarström:そうです!ありがとう。私はその回答を明確にした。 – joeslice