2010-05-17 60 views
2

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

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

有人可以澄清一下发生了什么,最好用代码示例? 在此先感谢。

回答

2

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

的信号可以被受阻,这 意味着它不会被传递 直到后来畅通。在 之间生成时间和 它被传递信号据说是 等待

进程中的每个线程都有一个 独立信号掩码,其中 表示线程当前阻塞的一组信号。 A 线程可以使用pthread_sigmask(3)来操纵其信号掩码 。在 传统的单线程 应用程序中,sigprocmask(2)可以是 用于操纵信号掩码。

因此,您可以使用sigprocmask()来阻止和取消阻止信号。如果信号在被阻塞时产生,则处理程序在被解除阻塞之前不会被调用。如果一个信号在解除阻塞时处于挂起状态,则该信号的处理程序将照常进行调用。

请注意,一个给定的信号要么待处理,要么没有;它不能“等待两次”(或更多)。如果信号在被阻塞时升高两次,它仍然只能传送一次。