我可以检查未决信号并立即执行它们吗

标签 c linux signals

我想做的是只处理代码中某些已知点的信号。所以在那些时候我会检查挂起的信号并立即执行它的处理程序。

我知道我可以使用 sigprocmask 来阻止信号,然后再解除阻止,但仍然如此,信号将在解除阻止后的任何时间点传送,这是我不想要的.我想在代码中的特定位置精确地执行信号处理程序。换句话说,我想让信号处理同步。

有没有可能实现我想要做的事情的方法?

最佳答案

您可以使用系统调用的 sigwait 系列获取任何待处理的阻塞信号。但是,不可能同时等待信号和其他类型的事件,如果您不想在 sigwait 中阻塞,您可以先使用 sigpending 检查是否有未决信号。

如果您的应用程序使用事件驱动设计,您通常会在一个运行循环中有多个 fd。对于这种情况,您应该改用写入 pipe 的信号处理程序。该信号将异步传递,但随后将作为另一个需要处理的 fd 出现在您的运行循环中。

关于我可以检查未决信号并立即执行它们吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330135/

相关文章:

c - tcgetpgrp() 返回值是什么意思?

linux - 如何解析已使用不同区域设置格式化的日期

linux - 信号处理程序后信号无法生成核心转储

C:简单的HTTP服务器。读取本地文件并从浏览器下载

c - Strcmp 未将数组与字符串 "abc"进行比较

c - 根据用户输入构建字符串数组

linux - 每行计算文件中的唯一元素

linux - 找不到事件错误

java - 为什么今天有人会使用 Java 命令行选项 -Xrs?

multithreading - AIO 可以在不创建线程的情况下运行吗?