信号的注册(修改信号pending位图)
- 信号记录在进程pcb中;
- 信号集合:sigset_t 结构体(保存信号):进程记录一个信号时是通过这个结构体的位图来记录的(1号信号在位图第0位置存储,位图的该位置原本是0,如果有信号,该位置置1),这个位图的位数+1代表的就是指定 的信号存储位置。
信号的阻塞与屏蔽
在pcb中有一个pending结构体存储当前收到的信号,还有一个结构体blocked用于存储现在都有哪些信号要被阻塞。
进程看到pending集合都收到了哪些信号,然后就要开始处理这些信号,但是在处理这些信号之前,进程会先对比一下这些信号有没有存在于blocked集合中,如果存在就意味着这个信号将不被处理,直至阻塞解除。
sigprocmask:(可以读取或者更改进程的阻塞信号集)
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
-
how: 对集合所做的操作
-
SIG_BLOCK :对set集合中的信号进行阻塞(将set集合中的信号放在blocked集合中,位图置