我一直关注捕捉信号的多种方法。最新的一个是使用全局变量。我的目标是捕获控件 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 中遇到问题?