如何在C中正确捕获信号

时间:2014-12-19 23:39:09

标签: c signals

我一直专注于捕捉信号的许多方法。最新的一个是使用全局变量。我的目标是捕捉控制C,当它被按下时,它会设置一个标记为" 1"然后触发一些代码运行。

我的问题是,我可以抓住信号。但是发现无法运行应该在if语句中运行的代码。

void handleSignal (int signal);

int signalAction = 0;

int main ()
{
    //catch signal control C
    if (signal(SIGINT, handleSignal) == SIG_ERR)
    {
        write (2, "Error catching signal C \n", 26);
    }

    if (signalAction == 1)
    {
        write(1, "WOOO CONTROL C \n", 16);
        signalAction = 0;
    }

    printf("%d \n", signalAction);

    while(1)
        sleep(1);   
}

void handleSignal (int signal)
{
    if (signal == SIGINT)
    {
        write(1, "ContrlC \n", 11);
        signalAction = 1;
    }
}

当按下控制c时,我得到" contrlC"从信号处理程序打印出来。然而,主函数中的if语句if(signalAction == 1)....并没有运行。

该变量必须设置为1.由于某种原因,它们是主要问题吗?

1 个答案:

答案 0 :(得分:4)

if(signalAction ==1)移至while循环