信号处理奇怪的行为

signal handling strange behaviour

本文关键字:信号处理      更新时间:2023-10-16

我只是在试验信号处理,所以我写了一个程序来测试SIGINT,但是发生了一些奇怪的事情!

我的代码是这样的:

void signalHandle(int);
int main()
{
    signal(SIGINT, signalHandle);
    for (int i = 0; i < 100000; ++i)
    {
        cout << i <<"r";
    }
}
void signalHandle(int signalValue)
{
    cout << "Interrupt signal (" << signalValue <<
        ") recieved . Do you wish to continue?" << endl;
    int response;
    cin >> response;
    if (response == 0)
        exit(EXIT_SUCCESS);
    signal(SIGINT, signalHandle);
}

当我使用ctrl+c的时候,程序其实会转到signalHandle函数,但只打印消息,而跳过其余的。 很奇怪。我使用了一个空循环,它工作得很好.另外,我使用了提高功能,也很好。我不知道为什么我会得到这个奇怪的结果......而且我对这个话题有点困惑,大多数培训只是强调提高功能。我正在使用Windows,那么我必须在哪里寻找更深入的理解?我的书想让我看看系统手册...

我相信

您的问题与您将cinint一起使用,但同时为其提供"char"这一事实有关。

因此,如果您用 0 以外的任何内容来回答问题,该程序将继续运行,直到循环结束。但是如果你为它提供一些无法解析为int的东西,比如yresponse将等于 0,你的程序将exit()

要解决此问题,您只需将int reponse更改为char response,如果这是您想要的。