程序不响应从终端发送的 linux 信号而不在终端上连续打印
Program not responding to linux signals sent from terminal without continuous printing on terminal
我有一个 C 程序,如下所示:
while(1){
if(flag1){
...
}
if(flag2){
...
}
}
现在这些标志将在 SIGINT 和 SIGTSTP 信号的处理程序中出现。输入Ctrl+C或Ctrl+Z时终端只显示^C和^Z,但不执行条件代码块。
然而,完全相同的程序,但如果我给出如下所示的 printf:
while(1){
printf(" ");
if(flag1){
...
}
if(flag2){
...
}
}
程序响应Ctrl+Z或Ctrl+C信号,执行各自的条件代码块。
有人可以解释这种行为吗?我不确定为什么让终端忙于连续打印某些东西,使我的程序响应信号,而不是其他方式。
条件代码块可以优化掉,因为编译器不知道这些变量可以在循环外改变。将标志定义为易变的,即
volatile int flag1;
...
这样编译器就知道不对这些变量的值做出任何假设。
我有一个 C 程序,如下所示:
while(1){
if(flag1){
...
}
if(flag2){
...
}
}
现在这些标志将在 SIGINT 和 SIGTSTP 信号的处理程序中出现。输入Ctrl+C或Ctrl+Z时终端只显示^C和^Z,但不执行条件代码块。
然而,完全相同的程序,但如果我给出如下所示的 printf:
while(1){
printf(" ");
if(flag1){
...
}
if(flag2){
...
}
}
程序响应Ctrl+Z或Ctrl+C信号,执行各自的条件代码块。 有人可以解释这种行为吗?我不确定为什么让终端忙于连续打印某些东西,使我的程序响应信号,而不是其他方式。
条件代码块可以优化掉,因为编译器不知道这些变量可以在循环外改变。将标志定义为易变的,即
volatile int flag1;
...
这样编译器就知道不对这些变量的值做出任何假设。