文章目录
  1. signal系统调用
  2. sigaction系统调用

signal系统调用

使用signal函数为一个信号设置处理函数。

1
2
3
4
5
6
7
/*
引用方式: #include <signal.h>
sig: 指定要捕获的信号类型
_handler: 指定信号sig的处理函数
返回_sighandler_t类型的函数指针或sig信号对应的默认处理函数指针SIG_DEF: 成功 || 返回SIG_ERR并设置errno: 失败
*/
_sighandler_t signal(int sig, _sighandler_t _handler);

sigaction系统调用

设置信号处理函数的更健壮的接口是sigaction系统调用。

1
2
3
4
5
6
7
/*
引用方式: #include <signal.h>
sig: 指定要捕获的信号类型
act: 指定新的信号处理方式
oact: 存入之前信号的处理方式
*/
int sigaction(int sig, const struct sigaction * act, struct sigaction * oact);

sigaction结构体描述信号处理的细节,其定义如下。

1
2
3
4
5
6
7
8
9
struct sigaction{
union{
__sighandler_t sa_handler;
void (*sa_sigaction) (int, siginfo_t *, void *);
}__sigaction_handler;
__sigset_t sa_mask;
int sa_flags;
void (*sa_restorer) (void);
};
  • sa_handler。指定信号处理函数;
  • sa_mask。信号集类型参数(详见下一节);设置进程的信号掩码(在进程原有信号掩码的基础上增加),以指定哪些信号不能发送给本进程;
  • sa_flags。设置程序收到信号时的行为;可选值如下表所示。