C信号代码混淆

标签 c linux signals

这是我正在学习的考试的示例问题 - 问题是代码有什么问题。我在想这可能是警报(3),导致它跳入 while 循环的延迟?或者可能不应该使用 SIGALRM 从 sleep 中醒来,但我认为这不是一个有效的观点。感谢任何反馈,我发现很难找到与此类内容相关的相关信息。

static void foo(int signo) {
  printf("Nudge-nudge\n");
  alarm(3);
}
int main() {
  sigset_t set;
  sigemptyset(&set);
  sigset(SIGALRM, foo);
  alarm(3);
  while (1) {
    sigsuspend(&set);
  }
  return (0);
}

最佳答案

这里的问题(也许只是其中之一)是您在 信号集 sigset(3) 上暂停进程不填充它。 sigsuspend(2)修改进程信号掩码,因此 SIGALRM 被阻止。

关于C信号代码混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954171/

相关文章:

将变量转换为结构定义中定义的 union 类型

c - 我需要为 OpenCL 安装 Nvidia 的 SDK(CUDA) 来检测 Nvidia GPU 吗?

linux - nginx 不监听 80 端口

C 程序,将参数传递给信号处理函数?

c - 读取 int 并将其存储在 C 中的 char * 缓冲区中

c - 将值从简单表复制到 C 代码中指定地址的结构中的表时出现问题

c++ - 生成加起来等于某个数字的所有唯一数字组合

python - 在 Python 3.4 中导入表格时出现问题

python - 中断阻塞的 evdev 读取

Python 在两个 QThread 之间发送信号