【发布时间】:2021-12-13 04:32:36
【问题描述】:
我正在编写一个需要捕获 ctrl-c 事件的程序。而且我了解到我可以在signal.h 中调用signal 函数或sigaction 函数来自定义进程收到SIGINT 信号时的操作。但我也很好奇这种信号监听器的机制是什么。换句话说,进程如何在继续执行其代码的同时继续等待特定信号?
【问题讨论】:
-
操作系统做这个,进程不参与。
-
信号由操作系统异步传递。如果您希望能够以同步方式等待它们,Linux 支持
signalfd的概念。 -
不相关:因为节目是由操作系统运行的,所以你必须小心你在信号处理程序中所做的事情。在 POSIX 系统中,实际上有a list 你可以做什么,因为它比你不能做什么的列表要小得多。一般的经验法则是设置一个原子标志来告诉程序信号发生并摆脱信号处理程序。在处理程序之外运行的代码中的某处,程序会检查标志并采取适当的措施。