这里我有一些代码示例:
/* some headers */
…
/****************/
void handler( int signum ){
printf("Signal number: %d received\n", signum);
signal(signum, SIG_DFL);
}
int main( int argc, char* argv[] ){
signal(SIGINT, handler);
while( "no signal was received" ){
printf("another loop round\n");
sleep(3);
}
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我希望我的程序退出,在我的处理程序函数中定义的消息,在CTRL + C键盘组合后,就像它通常发生的那样,但我必须输入两次命令,并且只有在我第二次尝试它停止之后.我还想问另一个关于signal功能的问题.我发现了很多引用,人们会建议使用sigaction函数代替signal,但有些人说这样做会因兼容性原因而更好signal.你能给我一些关于我应该使用哪些提示的提示吗?提前致谢
有了这条线
signal(SIGINT, handler);
Run Code Online (Sandbox Code Playgroud)
你通过调用来替换默认行为,即退出程序handler().这就是为什么程序不会在信号接收时退出的原因.
在handler()随后调用
signal(signum, SIG_DFL);
Run Code Online (Sandbox Code Playgroud)
重新设置默认行为SIGINT,即退出程序(下一次)接收信号.
OT:一个人不得printf()从信号处理程序中调用(以及其他人),在它(以及其他人)不保证异步信号安全.有关man 7 signal这些功能的列表,请参阅.