2

Linuxプロセスがいつシグナルを処理するのか知りたいです。プロセスがシグナルのシグナル ハンドラーをインストールしたと仮定して、プロセスの通常の実行フローがいつ中断され、シグナル ハンドラーが呼び出されるかを知りたいと思いました。

http://www.tldp.org/LDP/tlk/ipc/ipc.htmlによると、プロセスはシステム コールを終了するときにシグナルを処理します。これは、a = b+c (または同等のマシン コード) のような通常の命令が、シグナルによって中断されないことを意味します。

また、シグナルを受信すると中断される (EINTR で失敗するか、再開される) システム コールもあります。これは、システムコールが完了する前であってもシグナルが処理されることを意味します。この動作は、前の段落で述べたことと矛盾しているようです。

そのため、信号がいつ処理され、どのプロセス状態でプロセスによって処理されるかについては明確ではありません。中断できるか

  1. カーネル空間からユーザー空間に入るたびに、または
  2. ユーザー空間にあるときはいつでも、または
  3. スケジューラーによってプロセスの実行がスケジュールされているときはいつでも

ありがとう!

4

2 に答える 2

2

http://www.tldp.org/LDP/tlk/ipc/ipc.htmlによると、プロセスはシステム コールを終了するときにシグナルを処理します。これは、a = b+c (または同等のマシン コード) のような通常の命令が、シグナルによって中断されないことを意味します。

その場合、CPU を集中的に使用するプロセスはプロセス スケジューラに従いません。実際、スケジューラは、タイム クォンタムが経過した時点でプロセスを中断できます。FIFOリアルタイムプロセスでない限り。

より正確な定義: シグナルがプロセスに配信される 1 つのポイントは、制御フローがカーネル モードを離れて、ユーザー モード コードの実行を再開するときです。それは必ずしもシステムコールを必要としません。

于 2013-01-14T16:06:25.810 に答える
1

信号処理のセマンティクスの多くは、セクション7のマニュアルページに記載されています(Linuxの場合、とにかく、他のOSも同様ですが、必ずしも同じ場所にあるとは限りません)signal。システムにインストールすると、次のようにアクセスできます。 :

man 7 signal

マニュアルページがインストールされていない場合、オンラインコピーを見つけるのは非常に簡単です。

于 2013-01-14T17:32:58.003 に答える