我一直在关注捕捉信号的许多方法。最近的一个是使用全局变量。我的目标是捕获控件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被按下时,我从信号处理器上打印出“控制”。然而,主函数if中的if语句(signalAction==1)。。。。不会跑。
变量必须设置为1。他们的问题主要是因为某种原因吗?

最佳答案

在while循环中移动if(signalAction ==1)

10-08 07:53