在Windows控制台应用程序中,可以通过使用:
来抓住ctrl+c
#include <stdio.h>
#include <signal.h>
void SigInt_Handler(int n_signal)
{
printf("interrupted\n");
}
int main(int n_arg_num, const char **p_arg_list)
{
signal(SIGINT, &SigInt_Handler);
getchar(); // wait for user intervention
}
这很有效,但如果用户按下关闭控制台窗口的交叉×
则根本不起作用。有什么信号吗?
我需要这个的原因是我有这个CUDA应用程序,如果在计算某些东西时关闭,它会导致计算机崩溃。代码是多平台的,所以我更喜欢使用信号而不是SetConsoleCtrlHandler
。有办法吗?
答案 0 :(得分:2)
正确的是SIGBREAK
,您可以尝试使用:
#include <stdio.h>
#include <signal.h>
void SigInt_Handler(int n_signal)
{
printf("interrupted\n");
exit(1);
}
void SigBreak_Handler(int n_signal)
{
printf("closed\n");
exit(2);
}
int main(int n_arg_num, const char **p_arg_list)
{
signal(SIGINT, &SigInt_Handler);
signal(SIGBREAK, &SigBreak_Handler);
getchar(); // wait for user intervention
return 0;
}
关闭控制台窗口后,程序将打印"closed"
并返回2.