UNIX 信号处理深入解析
1. 信号处理基础回顾
在程序中,我们常常需要对信号进行定义和处理。例如,有这样一个程序示例:
cc -o rsig1 rsig1.o
$ ./rsig1
Waiting for SIGINT..
^CGot SIGINT
Waiting for SIGINT..
^CGot SIGINT
End.
$
这个程序和之前的某个程序功能类似。值得注意的是,在代码的第 32 行添加了对 sigaction(2) 的调用。虽然对于这个程序来说这不是必需的,但它展示了如何恢复信号处理动作。在第 25 行执行时,通过将设置保存到变量 sa_old 中,保存了 SIGINT 的处理动作,而第 32 行则使用 sa_old 恢复了 SIGINT 的处理动作。
2. 信号控制
有时候,我们需要更精确地控制信号何时被触发。在 UNIX 系统中,有多种方法可以实现这一点。
2.1 信号阻塞
在讨论 sigaction(2) 函数时,我们提到在调用信号处理函数期间可以阻塞某些信号。例如,当 SIGINT 信号由信号处理函数处理时,在当前处理函数返回之前,后续的 SIGINT 信号将被阻止触发(除非使用 SA_NOMASK 或
超级会员免费看
订阅专栏 解锁全文
372

被折叠的 条评论
为什么被折叠?



