我正在尝试找出如何阻止Linux内核2.4 (用户空间)中的一个信号调用它的处理程序,但要保持它可用,以便稍后处理,最好是在我重新激活对该信号的处理时。
函数sigprocmask似乎出现在我所有的搜索结果中,但我找不到一个好的、清晰的描述来解释阻塞的信号是否被“保存”以便稍后处理,如果是的话,当我准备好处理它时,我应该在哪里以及如何处理它。
有没有人能澄清一下到底是怎么回事,最好是举个代码例子?提前谢谢。
发布于 2010-05-18 00:21:44
我真的不能说得比signal(7)
手册页更好了:
A信号可能被阻塞,这意味着在稍后解除阻塞之前它不会被传送。在信号生成和发送之间,信号被称为挂起状态。
进程中的每个线程都有一个独立的信号掩码,它指示线程当前正在阻塞的一组信号。线程可以使用pthread_sigmask(3)
操作其信号掩码。在传统的单线程应用程序中,可以使用sigprocmask(2)
来操作信号掩码。
因此,您可以使用sigprocmask()
阻塞和解除阻塞信号。如果信号在被阻塞时被引发,处理程序将不会被调用,直到它被解除阻塞。如果信号在解除阻塞时处于挂起状态,则会照常调用该信号的处理程序。
请注意,给定的信号要么是挂起的,要么不是;它不能“挂起”两次(或更多)。如果信号在被阻塞时发出两次,它仍然只会被传递一次。
https://stackoverflow.com/questions/2853653
复制相似问题