<aside>
💡 sigaction
检查或者改变信号的处理。常用于信号捕捉
</aside>

参数
signum
:需要捕捉的信号的编号或者宏值
act
:一个结构体指针,用于定义捕捉到信号之后的处理动作
oldact
:结构体指针,用于保存上一次信号捕捉相关的设置,一般不使用,传递NULL
返回值
结构体sigaction

- sa_handler:一个函数指针,用于实现回调函数
- sa_sigaction:一个函数指针,某种情况下会替代sa_handler,不常用
- sa_mask:临时阻塞信号集,在信号捕捉函数执行过程中,设置某些信号临时阻塞
- sa_flags:设置使用哪一个信号处理函数对捕捉到的信号进行处理,常用以下两个值:
- 0:表示使用sa_handler
- SA_SIGINFO:表示使用sa_sigaction
- sa_restorer:已废弃,指定NULL即可
<aside>
💡 signal
与 sigaction
功能类似,但应该尽量使用 sigaction
,signal
在不同Linux版本下行为可能不同
</aside>
内核实现信号捕捉的过程

- 常规信号不支持排队,未决信号集中只能记录是否有某个信号处于未决状态,而不能记录有几个该信号处于未决状态
- 重复到达的信号会被丢弃
- 在信号处理函数执行期间,默认情况下,当前处理的信号会被阻塞(信号处理的原子性)
- 实时信号支持排队