在这里,我正在创建一个处理程序:
struct sigaction act;
act.sa_handler=handler;
sigaction(SIGINT,&act,NULL);
处理函数本身handler:
void handler()
{
reset_canonical_mode();
system("clear");
exit(1);
}
当我按CTR + C,理论上应该调用函数handler,调用,但是我不明白它是如何工作的,reset_canonical_mode();根本没有调用函数。为什么会这样?请解释如何响应 SIGINT 信号清除终端、显示消息并关闭进程?
编写信号处理程序的基本原则是不要在其中做任何可能导致延迟甚至挂起程序的事情。为什么是一个单独的问题。
因此,最好从处理程序中取出所有此类操作。例如,像这样:
请注意,因为 程序拦截按 Ctrl / C,因此无法停止它。您将不得不打开另一个终端,在其中发出命令ps ax,找到正在运行的程序的pid并使用kill -9 "program pid"杀死它