C-c语言如何屏蔽INTR和SUSP信号?

C-c语言如何屏蔽INTR和SUSP信号?

偏爱自由 发布于 2017-10-26 字数 89 浏览 1236 回复 1

一个程序在终端运行时如何屏蔽这两个信号?排除对stty设置的方式实现,程序中如何屏蔽?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

虐人心 2017-10-26 1 楼

SUSP信号好像无法屏蔽的,SUSP是向程序发送SIGSTOP信号,即用于暂停进程。这是系统默认动作,所以总是会被执行的。

至于INTR向程序发送SIGINT信号,它是可以屏蔽的。下面代码来源网络:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <stdbool.h>

bool keep_going = true;

void ignore_notice()
{
keep_going=false;
printf("recieved SIGINT,and ignore it.n");
}

void do_something()
{
int i=0;
while(i < 1000000)
{
i++;
}
}

int main ()
{
//设置针对SIGINT的动作,第二个参数可以传入函数指针,指定处理方式为函数内容,也可以为SIG_IGN,忽略这个信号,或者SIG_DFL,执行默认的动作
if(signal(SIGINT, ignore_notice) == SIG_ERR)
{
printf("Failn");
return 1;
}

while(keep_going)
do_something();

printf("program normally exit.n");
return 0;
}