プロセスがを実行してSIGALARM信号を設定する場合alarm(10)
。これは、10秒後にオペレーティングシステムがSIGALARMを送信することを意味します。
コンテキスト切り替えがあるとどうなりますか?システムはコンテキスト遷移に関係なく信号を送信し続けますか?それとも、プロセスに戻って信号を送信する前に合計10秒間実行されるのを待ちますか?
答え1
alarm()
リアルタイム集計、POSIXのテキストこれをはっきりと指摘してもLinuxのマニュアルページこれは明確に明記されていません。したがって、タイマーはプロセスが実行されているかどうかに関係なく実行されます。通常、プロセスがスリープしている場合、シグナルはプロセスを起動しますが、オペレーティングシステムは、実行する優先順位が高い他のプロセスがある場合は、プロセスを実際に実行しないことを決定することもできます。
しかもsetitimer()
、プロセスの実行中にのみ実行されるタイマーを提供できます。