Chinaunix首页 | 论坛 | 博客
  • 博客访问: 268843
  • 博文数量: 84
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 927
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-06 23:00
个人简介

growing

文章分类

全部博文(84)

文章存档

2017年(6)

2016年(61)

2015年(17)

我的朋友

分类: LINUX

2016-07-11 15:21:54

产生方式:

1.按键方式(Ctrl+C【只能停止正在运行的前台进程】等)
2.异常触发 (除0或内存越界等)
3.指令方式
4.程序调用函数

使用例子:


  1. #include<stdio.h>
  2. #include<signal.h>
  3. #include<stdlib.h>
  4. #include<sys/types.h>

  5. void handler(int sig)
  6. {
  7.     printf("get a sig,num is:%d\n",sig);
  8. }

  9. void print_sig(sigset_t *p)
  10. {
  11.     int i = 1;
  12.     for(;i < 32;++i){
  13.         if(sigismember(p,i)){
  14.             printf("1");
  15.         }else{
  16.             printf("0");
  17.         }
  18.     }
  19.     printf("\n");
  20. }

  21. int main()
  22. {
  23.     signal(2,handler);
  24.     sigset_t s,p,o;
  25.     sigemptyset(&s);
  26.     sigemptyset(&o);
  27.     sigaddset(&s,SIGINT);

  28.     sigprocmask(SIG_SETMASK,&s,&o);

  29.     int count = 0;
  30.     while(1){
  31.         sigemptyset(&p);
  32.         sigpending(&p);
  33.         print_sig(&p);
  34.         sleep(1);
  35.         if( count++ == 10 ){
  36.             sigprocmask(SIG_SETMASK,&o,NULL);
  37.             printf("recover block\n");
  38.             sleep(3);
  39.         }
  40.     }
  41. }


阅读(1101) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~