【发布时间】:2020-04-06 01:43:41
【问题描述】:
我是 Unix 中的信号新手,这个练习的目的是禁用 SIGINT 来停止程序并改用 SIGQUIT,当我按下 ctrl-c 时它成功地忽略了 SIGINT 但直到我按下 printf 才显示Ctrl-/ 用于SIGQUIT,所有消息同时出现。
示例:如果我按 ctrl-c 4 次然后按 ctrl-/: 只有在按下 ctrl-\ 后,我才会收到 4 条消息,说我按下了 Ctrl-c 然后退出你发送了 SIGQUIT 信号。
如果我只按 ctrl-c 我什么也得不到,但至少它被忽略了
struct sigaction action;
void hand(int sig)
{
switch(sig){
case SIGINT:
printf("You have presed ctrl-c");
break;
case SIGQUIT:
printf("Quittin you sent a SIGQUIT signal");
exit(SIGQUIT);
break;
default:
printf("WRONG SIGNAL");
exit(-1);
break;
}
}
int main()
{
action.sa_handler=hand;
printf("Ctrl-C disabled, press Ctrl-/ to quit...\n");
sigaction(SIGINT,&action,NULL);
sigaction(SIGQUIT,&action,NULL);
while(1){
sleep(1);
}
}
【问题讨论】:
-
请正确格式化您的代码。
-
printf("You have presed ctrl-c");-->printf("You have presed ctrl-c\n");顺便说一句,您必须避免在信号处理程序中使用 printf -
@LPs 谢谢!它有效,但为什么呢?
-
是的,谢谢! @ChrisTurner
-
因为它是标准输出被缓冲。所以
\n将切换到“新行”