可靠信号、不可靠信号的观察案例:
1、创建子进程和父进程
2、注册SIGINT非实时信号 SIGRTMIN实时信号 添加到进程阻塞中
3、注册用户自定义信号SIGUSR1
4、子进程发送3次非实时信号,发3次实时信号
5、子进程发送SIGUSR1解除信号阻塞
6、观察实时信号和非实时信号的表现与区别
#include<sys/wait.h>
#include<sys/types.h>
#include<fcnt1.h>
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<signal.h>
#define ERR_EXIT(m)
do
{
perror(m);
exit(EXIT_FAILURE);
}while(0)
void myhandle(int num, siginfo_t *info, void *p) //实现数据接收
{
if(num == SIGUSR1)
{
// 把 SIGINT 和 SIGRTMIN均添加到本进程的解除阻塞状态字中
sigset_t bset;
sigemptyset(&bset);
sigaddset(&bset, SIGINT);
sigaddset(&bset, SIGRTMIN);
sigprocmask(SIG_UNBLOCK, &bset, NULL);
printf("解除阻塞recv sig num: %d \n", num);
}
else if(num == SIGINT || num ==SIGRTMIN)
{
printf("recv sig num: