Linuxプロセスがいつシグナルを処理するのか知りたいです。プロセスがシグナルのシグナル ハンドラーをインストールしたと仮定して、プロセスの通常の実行フローがいつ中断され、シグナル ハンドラーが呼び出されるかを知りたいと思いました。
http://www.tldp.org/LDP/tlk/ipc/ipc.htmlによると、プロセスはシステム コールを終了するときにシグナルを処理します。これは、a = b+c (または同等のマシン コード) のような通常の命令が、シグナルによって中断されないことを意味します。
また、シグナルを受信すると中断される (EINTR で失敗するか、再開される) システム コールもあります。これは、システムコールが完了する前であってもシグナルが処理されることを意味します。この動作は、前の段落で述べたことと矛盾しているようです。
そのため、信号がいつ処理され、どのプロセス状態でプロセスによって処理されるかについては明確ではありません。中断できるか
- カーネル空間からユーザー空間に入るたびに、または
- ユーザー空間にあるときはいつでも、または
- スケジューラーによってプロセスの実行がスケジュールされているときはいつでも
ありがとう!