「シグナル」に関するLinuxのドキュメントを読んでいますが、まだこれらの質問が頭に浮かびます。
1)「シグナル」ハンドラー実行は、「ターゲット」プロセスが実行トークンをから受信したときに実行されます。スケジューラー?
2)または「シグナル」ハンドラーExecutionはwhateverプロセスで発生します 'context'は発生します実行中「シグナル」が送信されたとき? (ハードウェアISRと同じスタイル)。
3)プロセスの実行はどうですかpriorities? 「信号」を処理するときにそれらは一掃されますか?
1)次にターゲットプロセスがカーネルモードからユーザーモードに戻ったときに、シグナルハンドラが実行されます。
これは、プロセスがハードウェア割り込み後に再度実行されるようにスケジュールされている場合(および、プロセスがカーネルモードでまだ実行されていない場合)、またはプロセスがシステムコールから戻った場合(一部のアーキテクチャでは、これらは同じものです)に発生します。
通常の操作では、カーネルモードを終了すると、プロセスは最初にユーザーモードを終了した時点の後に次の命令に戻るだけです。
ただし、シグナルがプロセスに対して保留中の場合、カーネルはプロセスコンテキストを[////]再書き込みするため、ユーザーモードに戻ると、代わりにシグナルハンドラーの最初の命令とスタックは、最初にユーザーモードを終了した時点でシグナルハンドラーに対して「特別な」サブルーチン呼び出しを行ったように見えるように変更されます(この「特別な」サブルーチン呼び出しからの復帰には、元の状態を復元するためのシステム呼び出しが含まれます)。
詳細については、 this 、 this および this をお読みください。
したがって、「ターゲット」プロセスは、シグナルハンドラが最終的に実行される前に、スケジューラから実行トークンを何度でも受け取る可能性があります。 (何らかの理由でカーネルモードのままである場合)。
2)いいえ-シグナルハンドラーは、プロセスのユーザーモードコンテキストでのみ実行されます。
3)Linuxなどのタイムシェアリングシステムでは、プロセスのNice値を数えない限り、実際には実行されませんprioritiesなので、一掃そこにないもの。
スレッドといわゆるリアルタイムスケジューリングポリシーによって物事が複雑になるため、上記のコメントは、非リアルタイムスケジューリングポリシー(唯一のソート)で実行されているシングルスレッドプロセスにのみ有効です。 古き良き時代に存在したプロセスの :-)。