linux 信号屏蔽
来源:互联网 发布:数据库用什么语言 编辑:程序博客网 时间:2024/04/29 18:56
<span style="font-size:18px;">#include <sys/types.h>#include <unistd.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>/*sigemptyset(&newmask);//获取空屏蔽信号集sigfillset(&newmask);//获取屏蔽了所有信号的屏蔽信号集,除了那两个SIGKILL SIGSTOPsigpending(&pendmask);//获取进程中当前的屏蔽信号集sigaddset(&newmask, SIGQUIT);//往空屏蔽信号集加入SIGQUIT(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)//并集(sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)//设置会原来的屏蔽信号集(sigismember(&fillmask, SIGQUIT))//判断SIGQUIT是否在当前的屏蔽信号集中*/static voidsig_quit(int);intmain(void){sigset_tnewmask, oldmask, pendmask,fillmask;if (signal(SIGQUIT, sig_quit) == SIG_ERR)//设置信号处理函数perror("can't catch SIGQUIT");/* * Block SIGQUIT and save current signal mask. */sigemptyset(&newmask);//获取空屏蔽信号集sigaddset(&newmask, SIGQUIT);//往空屏蔽信号集加入SIGQUITif (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)//并集perror("SIG_BLOCK error");sleep(5);/* SIGQUIT here will remain pending */ //睡眠期间按下多次 ctrl+\ 未决信号集中之保留一次if (sigpending(&pendmask) < 0)//获取进程中当前的屏蔽信号集perror("sigpending error");if (sigismember(&pendmask, SIGQUIT))//判断SIGQUIT是否在当前的屏蔽信号集中printf("\nSIGQUIT pending\n");/* * Restore signal mask which unblocks SIGQUIT. */if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)//设置会原来的屏蔽信号集,由于SIGQUIT保留着一个未决信号,所以这里触发了信号处理函数,SIGQUIT变回默认处理perror("SIG_SETMASK error");printf("SIGQUIT unblocked\n");sleep(5);/* SIGQUIT here will terminate with core file */ //在此期间按下 ctrl+\ 执行信号处理函数 ,调用默认处理。game over!printf("fillmask test\n");if (sigfillset(&fillmask) < 0)//获取屏蔽了所有信号的屏蔽信号集,除了那两个SIGKILL SIGSTOPperror("sigfillset error\n");if (sigismember(&fillmask, SIGQUIT))//判断SIGQUIT是否在当前的屏蔽信号集中printf("\nSIGQUIT pending\n");//在if (sigprocmask(SIG_SETMASK,&fillmask , &oldmask) < 0)//设置屏蔽所有perror("fillmask error\n");sleep(5);if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)//如果在fillmask测试期间有按下ctrl+\,则下面不会睡眠5秒了,执行了SIGQUIT的默认处理函数perror("SIG_SETMASK error\n");sleep(5);exit(0);}static voidsig_quit(int signo){printf("caught SIGQUIT\n");//if (signal(SIGQUIT, SIG_DFL) == SIG_ERR)//perror("can't reset SIGQUIT");}</span>
0 0
- linux 信号屏蔽
- linux信号屏蔽字
- Linux--信号屏蔽
- linux信号屏蔽
- linux进程中的信号屏蔽
- linux之信号屏蔽pending
- Linux中如何屏蔽信号
- Linux c 屏蔽信号、切换信号
- linux信号集与信号屏蔽字
- Linux Signal (6): 信号屏蔽字
- Linux Signal (6): 信号屏蔽字
- Linux Signal (6): 信号屏蔽字
- Linux Signal (5): 信号屏蔽字
- 在linux进程中的信号屏蔽
- linux 当前处理信号自动屏蔽
- 屏蔽信号
- 信号屏蔽
- Linux高级编程 第六章 进程控制 信号 定时器 信号操作 信号屏蔽
- Dijkstra算法求任意点到其它点的最短路径
- 面试技巧之群面
- Ueditor图片上传设置(1.4.3 JSP版本)
- POJ 2431 Expedition(贪心)
- Lua的类型与值
- linux 信号屏蔽
- 新版ADT创建项目时出现appcompat_v7\bin(missing),ppcompat_v7/gen(missing)的问题
- mysql查询优化
- 利用栈写的一个支持四则运算的计算器
- js 字符串中某字符被全部替换
- silverlight根据json字符串动态创建实体类
- Matlab的默认工作路径修改
- 线上问题解决思路
- 最牛B的编码套路