信号
信号的概念:
- 简单
- 携带信息少
- 使用在某个特定场景
信号的状态:
- 产生
- 未决状态 -- 没有被处理
- 递达 -- 已经处理
信号相关函数:
- kill -- 发送信号给指定进程
- raise -- 给自己发信号
- abort -- 给自己发送异常终止信号
- 闹钟:
- alarm -- 设置定时器(每个进程只有一个定时器)
- setitmer -- 可以实现周期定时
信号集概念:
- 未决信号集:没有被当前进程处理的信号
- 阻塞信号集:将某个信号放到阻塞信号集,这个信号就不会被进程处理,当阻塞解除后,信号被处理
信号集相关函数:
- 自定义信号集:
- int sigemptyset(sigset_t *set); 将set集合置空
- int sigfillset(sigset_t *set); 将所有信号加入set集合
- int sigaddset(sigset_t *set,int signo); 将signo信号加入到set集合
- int sigdelset(sigset_t *set, int signo); 将signo从set集合删除
- int sigismember(conset sigset_t *set, int signo); 判断set信号集中是否存在signo
- sigprocmask 函数
- 作用:将自定义信号集(屏蔽、解除、覆盖)阻塞信号集
- 函数原型:int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
- sigpending 函数
- 作用:读取当前进程的未决信号集
- 函数原型:int sigpending(sigset_t *set);
- 参数set的值是由内核将未决信号写入set
信号捕捉函数:
- signal 函数
- typedef void (*sighandler_t)(int); 函数指针
- sighandler_t signal(int signum, sighandler_t handler);
- 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; int sa_flags; void (*sa_restorer)(void); };
- 结构体中 如果使用第一个参数,则sa_flags赋值为0。
- sa_mask:在信号处理函数执行过程中,临时屏蔽的信号。信号处理函数执行完毕后会执行临时屏蔽的信号
-

浙公网安备 33010602011771号