【UNIX高级环境编程】3.信号
来源:互联网 发布:淘宝旺铺有什么用 编辑:程序博客网 时间:2024/05/17 02:40
#include <signal.h>#include <stdio.h>#include <stdlib.h>static void sig_quit (int signo) //信号处理函数{ printf ("caught SIGQUIT\n"); if (signal (SIGQUIT,SIG_DFL) == SIG_ERR) //signal 用法 perror ("cant reset SIGQUIT");}static void sig_int (int signo) //信号处理函数{ printf ("caught SIGINT\n") ; if (signal (SIGINT,SIG_DFL) == SIG_ERR) //捕捉信号 默认是终止进程 perror ("cant reset SIgINT") ;}int main (void){ sigset_t newmask ,oldmask, pendmask; if (signal (SIGQUIT,sig_quit) == SIG_ERR)/*设置信号处理函数*/ perror ("cant catch SIGQUIT") ; if (signal(SIGINT,sig_int) == SIG_ERR) perror ("cant catch SIGINT"); sigemptyset (&newmask) ; //初始化信号集 ---清空进程信号集 sigaddset (&newmask,SIGQUIT) ;// 添加信号到当前进程信号集 sigaddset (&newmask,SIGINT) ; /*添加信号到当前信号集*/ if (sigprocmask(SIG_BLOCK,&newmask,&oldmask) <0) /*设置屏蔽字,当前进程的阻塞信号保存在oldmask里面*/ perror ("SIG_BLOCK error") ; /*set与oldmask都为非空指针,则先将原来的信号屏蔽字备份到oset里,然后根据set和how参数更改信号屏蔽字*/ sleep (5) ; if (sigpending (&pendmask) < 0 )/* 检测未决信号*/ perror ("sigpending error") ; /*处理信号阻塞队列*/ if (sigismember (&pendmask,SIGQUIT) ) //检测是否有出现SIGQUIT信号的出现 printf ("SIGQUIT pending\n") ; if (sigismember(&pendmask, SIGINT) ) //检测未决信号是否有SIGINT出现 printf("SIGINT pending\n") ; //有则打印信息 if (sigprocmask(SIG_SETMASK,&oldmask,NULL) <0 )/* SIG_SETMASK用oldmask的信号掩码代替当前的掩码*/ ----oldset是之前备份的原先进程的掩码 perror ("SIG_SETMASK error") ; /*fprintf (stderr,"SIGNOAL unblock\n") ;*/ sleep (5) ; exit (0);}`输出结果应该是这样的:进程执行的前5秒,进程屏蔽SIGINT和SIGQUIT信号,5秒后进程检测未决信号,并对未决信号进行打印输出,5秒后回复进程默认处理方式,如果前5秒的被阻塞的将调用相应信号处理函数处理。输出结果是这样子的:`thinkpad@thinkpad:~/C_Pro/mul-tcommun$ ./sig_Complex ^C^\SIGQUIT pendingSIGINT pendingcaught SIGQUITcaught SIGINT`
0 0
- 【UNIX高级环境编程】3.信号
- Unix高级环境编程(信号)
- Unix环境高级编程---信号
- unix环境高级编程-10(信号)
- unix 高级环境编程-1.9-信号
- 《Unix环境高级编程》:信号处理
- 《Unix环境高级编程》:同步信号处理
- UNIX环境高级编程之信号
- UNIX环境高级编程——信号
- UNIX环境高级编程--信号(十)
- 《UNIX环境高级编程》笔记--可靠信号
- 《UNIX环境高级编程》笔记--信号集
- UNIX环境高级编程(十)信号
- unix 环境高级编程 信号三态
- 《unix环境高级编程》-10.信号-读书笔记
- UNIX环境高级编程之-----信号signal
- UNIX环境高级编程——信号
- 《Unix高级环境编程》第十章 信号
- Java面试宝典2013版(超长版)
- 题目1189:还是约瑟夫环
- 13-14寒假作业9
- 给VM VirtualBox的Linux虚拟机添加虚拟硬盘
- 【prim】poj 2485
- 【UNIX高级环境编程】3.信号
- Cocos2D 2.1开发简单iPhone游戏(2)
- Java学习之关于静态修饰符的一个小程序
- 关于evalb的使用
- 四个铁球放入圆柱形容器
- poj-2352-Stars-线段树
- python note
- sdjzu2121叠筐
- 只要有你就溫暖了