27、UNIX 信号处理深入解析

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值