我正在试图弄清楚如何阻止Linux内核2.4(用户空间)中的信号调用其处理程序,但保持它可以在以后处理,最好是一旦我重新激活所述信号的处理。
函数sigprocmask似乎出现在我的所有搜索结果中,但我找不到一个好的,清晰的描述来解释被阻止的信号是否被“保存”以便稍后处理,如果是,我在哪里以及如何当我准备好它时处理它。
有人可以澄清一下发生了什么,最好是用代码示例吗? 提前致谢。
答案 0 :(得分:2)
我真的不能说比signal(7)
手册页更好:
信号可能被阻止,其中 意味着它不会被交付 直到它后来解锁。之间 它产生的时间和时间 它被传递了一个信号据说是 未决
进程中的每个线程都有一个 独立信号掩码,其中 表示该信号的集合 线程目前正在阻止。一个 线程可以操纵其信号掩码 使用
pthread_sigmask(3)
。在一个 传统的单线程 应用程序,sigprocmask(2)
可以 用于操纵信号掩码。
因此,您可以使用sigprocmask()
阻止和取消阻止信号。如果信号在被阻塞时被提升,则在解除阻塞之前不会调用处理程序。如果信号在未被阻塞时处于未决状态,则将照常调用信号处理程序。
请注意,给定信号是待处理还是未处理;它不能“等待两次”(或更多)。如果信号在被阻挡时被提升两次,它仍然只能被传送一次。