- 论坛徽章:
- 0
|
如何在进程执行中屏蔽中断?
- void SignalBlock()
- {
- int i;
- sigset_t nMask;
-
- sigemptyset(&nMask);
- sigaddset(&nMask,SIGINT);//add "Ctrl +C" signal
- while(1)
- {
- sigprocmask(SIG_BLOCK,&nMask,NULL);
- printf("SIGINT signal Blocked\n");
- printf("working.....\n");
- for(i=0;i<10;i++)
- {
- sleep(1);
- printf("Finished Work No.%d\n",i);
- }
- printf("Blocked End\n");
- sigprocmask(SIG_UNBLOCK,&nMask,NULL);
- }
- }
复制代码
使用sigprocmask(SIG_BLOCK,&nMask,NULL);程序将对nMask包含的信号忽略不处理。
sigprocmask(SIG_UNBLOCK,&nMask,NULL):放开对nMask包含的信号的屏蔽
如果你还想接收到"Ctrl +C"后做一些你自己的处理,可以参考以下代码:
- void CtrlCOp(int nSigNo)
- {
- pid_t pid;
- n++;
- printf("You Pressed Ctrl+C. %dth\n",n);
- if((n%5) == 0)
- {
- pid = getpid();
- kill(pid,SIGKILL);//kill -9
- }
-
- }
- void SignalAct()
- {
- struct sigaction act;
-
- act.sa_handler = CtrlCOp;
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
- if(sigaction(SIGINT,&act,NULL) < 0)
- {
- printf("Install Signal Action Error\n");
- exit(1);
- }
- while(1);
-
- }
复制代码 |
|