1 信号初步认识
1.1 特点
- 简单
- 携带的信息量少
- 使用在某个特定的场景中
1.2 信号的状态
信号优先级高, 进程先执行信号.
- 产生 由内核产生
- 键盘 – ctrl+c
- 命令 – kill
- 系统函数 – kill
- 软条件 – 定时器
- 硬件 – 段错误, 例除以0
- 未决信号 – 等待被处理
- 递达 – 已被处理
1.3 处理方式
忽略, 捕捉, 默认
1.4 信号的四要素
1.5 man文档查看信号
man 7 signal
1.6 阻塞信号集, 未决信号集
- 在pcb中, 不能直接操作
- 阻塞信号集 – 存放屏蔽的信号
- 未决信号集 – 待被处理的信号集合
2 信号相关函数
2.1 kill – 发送信号给指定进程
原型 int kill(pid_t pid, int sig);
2.2 raise – 给自己发信号
原型int raise(int sig)
2.3 abort – 给自己发送异常终止信号
3 信号集
4 信号捕捉
4.1 siganl
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
捕捉到信号, 则调用handler函数
4.2 sigaction
原型
int sigaction(int signum,
const struct sigaction *act,
struct sigaction *oldact
);
struct sigaction{
void (*sa_handler)(int); //用这个函数指针就够了
void (*sa_sigaction)(int, siginfo_t*, void*)
sigset_t sa_mask; //在信号处理中, 临时屏蔽指定信号, sa_handler运行完之后才运行
int sa_flags; //如果用sa_handler则赋值为0,
//void (*sa_restorer)(void);
}