【发布时间】:2017-06-07 19:13:23
【问题描述】:
我有一个 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 信号,执行相应的条件代码块。 有人可以解释这种行为吗?我不知道为什么让终端忙于连续打印的东西,让我的程序响应信号,而不是其他的。
【问题讨论】:
-
为什么不发布完整代码以便我们提供帮助?
-
程序没有响应Linux信号,我怎么知道只看骨架while循环。贴出有问题的代码和错误代码,这将有助于理解你面临的问题。
-
rio_writen 和 rio_readnb 是从网络套接字写入和读取的函数。
-
尝试将标志定义为 volatile。
标签: c linux signal-handling