的sa_mask
字段struct sigaction
指定在处理程序调用期间被阻止的信号。这些信号在处理程序被调用之前添加到进程块掩码中,并在处理程序完成后立即删除。如果sa_mask
和过程信号掩码重叠怎么办?sa_mask
是否会从过程信号掩码中删除那些同时被过程信号掩码屏蔽的信号?
问问题
1444 次
2 回答
7
当信号处理程序返回时,在处理信号之前有效的信号掩码将作为返回过程的一部分自动恢复。longjmp
这将发生,除非您使用or跳出信号处理程序siglongjmp
,在这种情况下,是否要手动保存和恢复信号掩码取决于您。
有趣的是,如果您使用该SA_SIGINFO
标志来设置三参数形式的信号处理程序,ucontext_t
则第三个参数指向的包含一个sigset_t uc_sigmask
反映已保存信号掩码的成员。此外,我不确定 POSIX 是否认可这种用法,但在我所知道的所有实际系统上,您实际上可以uc_sigmask
在从信号处理程序返回之前进行修改以设置不同的信号掩码(而不是恢复原始掩码) ) 当信号处理程序返回时。例如,如果您想重新引发刚刚处理的信号,但在返回时将其阻塞,以便稍后在信号再次被中断代码解除阻塞时或何时sigwaitinfo
或类似情况下,它实际上会被处理叫。
于 2011-11-07T15:45:40.277 回答
2
那些被 sa_mask 和进程信号掩码屏蔽的信号是否会从进程信号掩码中删除?
不。原始信号掩码被恢复,即。之前被阻止的东西会在之后被阻止。
于 2011-11-07T15:35:33.573 回答