Linux不可靠信号和可靠信号

1.不可靠信号和可靠信号

建立在早期的信号处理机制上**(1~31)的信号是不可靠信号**

不支持排队、可能会丢失,如果同一个信号连续产生多次,进程可能只相应了一次

如果解除屏蔽,取决于可靠性!!!1

建立在新的信号处理机制上**(34~64)的信号是可靠信号**

支持排队、信号不会丢失

2. int pause(void)

功能:让调用者进入休眠状态,直到进程遇到信号才会唤醒

返回值:要么不返回在休眠,要么唤醒后返回-1

相当于没有时间限制的sleep

unsigned int sleep(unsigned int seconds);

功能:让调用者进入休眠指定的秒数,当遇到信号时会提前唤醒返回

返回值:剩余的休眠时间

c 复制代码
  1 #include <stdio.h>
  2 #include<unistd.h>
  3 #include<signal.h>
  4 void sigint(int num)
  5 {
  6 printf("sigint%d\n",num);
  7 }
  8 
  9 
 10 void sigquit(int num)
 11 {
 12     printf("sigqiut:%d\n",num);
 13 }
 14 
 15 int main(int argc,const char* argv[])
 16 {
 17     printf("%d\n",getpid());
 18 
 19     signal(SIGINT,sigint);
 20     signal(SIGQUIT,sigquit);
 21 
 22     sigset_t set ,oldset;
 23     sigemptyset(&set);
 24 
 25     sigaddset(&set,SIGINT);
 26     sigaddset(&set,SIGQUIT);
 27     //sigaddset(&set,SIGKILL);
 28 
 29     sigfillset(&set);
 30 
 31     sigprocmask(SIG_SETMASK,&set,&oldset);
 32     sleep(5);//解除屏蔽5s内不会处理信号,因为不排队,不可靠性导致
 33      //0-31都都不可靠的信号不会排队
 34      //33-64是可靠的信号,会进行排队
 35     sigprocmask(SIG_SETMASK,&oldset,NULL);
 36     for(;;);
 37 
 38 
 39     return 0;
                    

屏蔽了cv,输入无效,已经被屏蔽了,sleep 5秒后开开始接受信号,

5秒之前发的信号,都无效,因为1-31信号是不排队的,不可靠

如果是34-64信号,输入都会排队,等sleep 5秒后,开始接受信号,

5秒前发的信息都会执行,可靠的

相关推荐
A小辣椒13 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒17 小时前
TShark:基础知识
linux
AlfredZhao19 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式