
main
andに2つの信号ハンドラを登録するとします。ランタイム信号が届いたらどうなりますか?SIGUSR1
SIGUR2
sig_ur1
sig_ur2
SIGUR2
sig_ur1
sig_ur1
実行--->信号SIGUR2
到着---->:
sig_ur1
継続実行 - >sig_ur1
完了 - >sig_ur2
実行開始 - >sig_ur2
完了 - >復帰main
sig_ur2
走り始め ->sig_ur2
終了 ->復帰main
sig_ur2
実行開始 - >sig_ur2
終了 - >再開(変数はsig_ur1
終了時に同じ値を保持します) - >終了 - >復帰sig_ur1
sig_ur1
main
sig_ur2
実行開始 - >終了sig_ur2
- >sig_ur1
再起動(すべての変数が再初期化される) - >終了sig_ur1
- >復帰main
どんなオプションが正しいですか?それとも両方が間違っていますか?この問題を扱った記事/投稿を見つけることができなかったので、関連資料/リンクを教えていただきありがとうございます。 :)
答え1
シナリオ3はデフォルトで発生します。ただし、SIGUSR1 のハンドラの実行中に SIGUSR2 をブロックできるため、シナリオ 1 が発生します。シグナルハンドラを取り付けるとき、シグナルハンドラの実行時にブロックする信号を指定できます。
参考までに、オペレーティングシステムのマンページから信号を読むことをお勧めします。たとえば、Linuxでは、man 7 signal
「See Also」のマニュアルページを表示できます。
ただし、動作を直接確認することはできます。長いスリープモード(3)に入るSIGUSR1用のハンドラを作成するだけです(SIGALRMを介してスリープ(3)が可能なので、Linuxではnanosleep(2)が優れています)。その後、SIGUSR1が最初に送信されます。そしてSIGUSR2。