多くの本は、信号がブロックされていない場合、信号生成と転送の間に時間枠があると言います。
その後、信号がブロックされていない場合、または信号の生成と転送がアトミックタスクであっても、時間枠がまだ存在するかどうかを知りたいと思います。
時間ウィンドウがまだ存在する場合、時間ウィンドウ中に他の信号(生成された信号と同じか異なる)も生成されるとどうなりますか?
答え1
あなたの質問に対するいくつかの答えは、シグナルハンドラの設定方法によって異なります。私は私たちがシステムコールを介して信号ハンドラを設定するという文脈でこれを見ていると思いますsigaction(2)
。
a の要素struct sigaction
名は「sa_mask」です。からman 2 sigaction
:
sa_mask gives a mask of signals which should be blocked during execution of the
signal handler. In addition, the signal which triggered the handler will be
blocked, unless the SA_NODEFER flag is used.
正しく設定すると、処理中の信号もブロックされないようです。個人的に私はその用途を想像することはできませんが、私の想像力は非常に限られています。
だから私は「はい、信号生成と受信プロセスの信号ハンドラ呼び出しの間にウィンドウがあります」と言いたいと思います。したがって、異なる信号が生成され、受信プロセスに送信される可能性があります。このような「他の信号」に何が起こるかについては、信号が「待機」されていないようです。以下を参照してください。スタックオーバーフロー回答、「リアルタイム」信号に加えて。つまり、カーネルがスタックを受信すると、マークされたkill(some_pid, SIGHUP)
プロセスはsome_pid
SIGHUP信号ハンドラを一度呼び出します。