推迟Linux中的信号处理

时间:2010-05-17 23:30:17

标签: linux-kernel

我正在试图弄清楚如何阻止Linux内核2.4(用户空间)中的信号调用其处理程序,但保持它可以在以后处理,最好是一旦我重新激活所述信号的处理。

函数sigprocmask似乎出现在我的所有搜索结果中,但我找不到一个好的,清晰的描述来解释被阻止的信号是否被“保存”以便稍后处理,如果是,我在哪里以及如何当我准备好它时处理它。

有人可以澄清一下发生了什么,最好是用代码示例吗? 提前致谢。

1 个答案:

答案 0 :(得分:2)

我真的不能说比signal(7)手册页更好:

  

信号可能被阻止,其中   意味着它不会被交付   直到它后来解锁。之间   它产生的时间和时间   它被传递了一个信号据说是   未决

     

进程中的每个线程都有一个   独立信号掩码,其中   表示该信号的集合   线程目前正在阻止。一个   线程可以操纵其信号掩码   使用pthread_sigmask(3)。在一个   传统的单线程   应用程序,sigprocmask(2)可以   用于操纵信号掩码。

因此,您可以使用sigprocmask()阻止和取消阻止信号。如果信号在被阻塞时被提升,则在解除阻塞之前不会调用处理程序。如果信号在未被阻塞时处于未决状态,则将照常调用信号处理程序。

请注意,给定信号是待处理还是未处理;它不能“等待两次”(或更多)。如果信号在被阻挡时被提升两次,它仍然只能被传送一次。