如何在C中正确捕获信号

lec*_*rdo 2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

当按下 control c 时,我会从信号处理程序中打印出“contrlC”。但是,主函数 if(signalAction ==1)... 中的 if 语句不会运行。

该变量必须设置为 1。他们是否因某种原因在 main 中遇到问题?

hel*_*loV 5

移动你的if(signalAction ==1)内部 while 循环