假设我为andmain
注册了 2 个信号处理程序,比如说and 。运行时信号到达时会发生什么?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
哪个选项是正确的?或者两者都不正确?我没有找到任何谈论这个的文章/帖子,所以提供任何相关的材料/链接将不胜感激。:)
默认情况下,场景 3 会发生。但是,您可以在运行 SIGUSR1 的处理程序时为阻塞 SIGUSR2 做好准备,因此您会遇到场景 1。当您安装信号的处理程序时,您可以指定在运行该信号的处理程序时要阻止哪些信号。
作为参考,我建议您阅读有关信号的操作系统手册页。例如,在 Linux 上,您可以从
man 7 signal
SEE ALSO 手册页开始并从那里开始。但是,您可以自己轻松地检查行为:只需为 SIGUSR1 创建一个进入长时间睡眠(3)的处理程序(在 Linux 中更好的 nanosleep(2),因为睡眠(3)可能通过 SIGALRM 实现),然后首先发送 SIGUSR1 和然后是 SIGUSR2。