Windows console application - signal for closing e

2020-02-12 09:17发布

问题:

In windows console application, one can catch pressing ctrl+c by using:

#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
}

This works well, except it does not work at all if the user presses the cross × that closes the console window. Is there any signal for that?

The reason I need this is I have this CUDA application which tends to crash the computer if closed while computing something. The code is kind of multiplatform so I'd prefer using signals rather than SetConsoleCtrlHandler. Is there a way?

回答1:

The correct one is SIGBREAK, you can try it with:

#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;
}

Upon closing the console window, the program will print "closed" and will return 2.