gpt4 book ai didi

linux-kernel - 在 Linux 中延迟信号处理

转载 作者:行者123 更新时间:2023-12-04 14:43:10 24 4
gpt4 key购买 nike

我正在尝试找出如何阻止 Linux 内核 2.4(用户空间)中的信号调用其处理程序,但保持它可供以后处理,最好是在我重新激活对所述信号的处理后立即处理。

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

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

最佳答案

我真的找不到比 signal(7) 手册页更好的说法了:

A signal may be blocked, which means that it will not be delivered until it is later unblocked. Between the time when it is generated and when it is delivered a signal is said to be pending.

Each thread in a process has an independent signal mask, which indicates the set of signals that the thread is currently blocking. A thread can manipulate its signal mask using pthread_sigmask(3). In a traditional single-threaded application, sigprocmask(2) can be used to manipulate the signal mask.

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

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

关于linux-kernel - 在 Linux 中延迟信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2853653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com