免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1396 | 回复: 2
打印 上一主题 下一主题

如何在进程执行中屏蔽中断? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-05 14:35 |只看该作者 |倒序浏览
如何在进程执行中屏蔽中断?比如CTRL+C

论坛徽章:
0
2 [报告]
发表于 2005-01-05 14:57 |只看该作者

如何在进程执行中屏蔽中断?


  1. void SignalBlock()
  2. {
  3.         int i;
  4.         sigset_t nMask;
  5.        
  6.         sigemptyset(&nMask);
  7.         sigaddset(&nMask,SIGINT);//add "Ctrl +C" signal
  8.         while(1)
  9.         {
  10.                 sigprocmask(SIG_BLOCK,&nMask,NULL);
  11.                 printf("SIGINT signal Blocked\n");
  12.                 printf("working.....\n");
  13.                 for(i=0;i<10;i++)
  14.                 {
  15.                         sleep(1);
  16.                         printf("Finished Work No.%d\n",i);
  17.                 }
  18.                 printf("Blocked End\n");
  19.                 sigprocmask(SIG_UNBLOCK,&nMask,NULL);
  20.         }
  21. }
复制代码

使用sigprocmask(SIG_BLOCK,&nMask,NULL);程序将对nMask包含的信号忽略不处理。
sigprocmask(SIG_UNBLOCK,&nMask,NULL):放开对nMask包含的信号的屏蔽
如果你还想接收到"Ctrl +C"后做一些你自己的处理,可以参考以下代码:

  1. void CtrlCOp(int nSigNo)
  2. {
  3.         pid_t pid;
  4.         n++;
  5.         printf("You Pressed Ctrl+C. %dth\n",n);
  6.         if((n%5) == 0)       
  7.         {
  8.                 pid = getpid();
  9.                 kill(pid,SIGKILL);//kill -9
  10.         }
  11.                
  12. }
  13. void SignalAct()
  14. {
  15.         struct sigaction act;
  16.        
  17.         act.sa_handler = CtrlCOp;
  18.         sigemptyset(&act.sa_mask);
  19.         act.sa_flags = 0;       
  20.         if(sigaction(SIGINT,&act,NULL) < 0)
  21.         {
  22.                 printf("Install Signal Action Error\n");
  23.                 exit(1);
  24.         }
  25.         while(1);
  26.        
  27. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-01-05 15:07 |只看该作者

如何在进程执行中屏蔽中断?

多谢多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP