Linux kernel Linux中的延迟信号处理

Linux kernel Linux中的延迟信号处理,linux-kernel,Linux Kernel,我试图弄清楚如何阻止Linux内核2.4(用户空间)中的信号调用其处理程序,但保持它可供以后处理,最好是在我重新激活对所述信号的处理时 函数sigprocmask似乎出现在我所有的搜索结果中,但我找不到一个好的、清晰的描述来解释被阻止的信号是否被“保存”以供以后处理,如果是的话,在我准备好的时候在哪里以及如何处理它 有人能澄清一下发生了什么,最好是用一个代码示例? 提前谢谢 我真的说不出比信号(7)手册页更好的了: 一个信号可能被阻塞,这 意味着它不会被交付 直到后来它被解锁。之间 它生成的时间

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

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

有人能澄清一下发生了什么,最好是用一个代码示例?
提前谢谢

我真的说不出比
信号(7)
手册页更好的了:

一个信号可能被阻塞,这 意味着它不会被交付 直到后来它被解锁。之间 它生成的时间和时间 它被传递了一个信号,据说是 待定

进程中的每个线程都有一个 独立信号掩码 指示所接收的信号集 线程当前正在阻塞。A. 线程可以操纵其信号掩码 使用
pthread\u sigmask(3)
。在一个 传统单螺纹 应用程序,
sigprocmask(2)
可以 用于操纵信号掩码

因此,您可以使用
sigprocmask()
阻止和解除阻止信号。如果在阻塞信号时引发该信号,则在解除阻塞之前不会调用处理程序。如果信号在解除阻塞时处于挂起状态,则会像往常一样调用该信号的处理程序

请注意,给定的信号要么是挂起的,要么不是;它不能“挂起两次”(或更多)。如果信号在被阻塞时被提升两次,它仍然只会被传递一次