C信号码混乱

时间:2012-08-14 14:11:44

标签: c linux signals

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

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);
}

1 个答案:

答案 0 :(得分:3)

此处的问题(可能只是其中之一)是您在信号集上挂起进程,sigset(3)不会填充它。 sigsuspend(2)修改了过程信号掩码,因此SIGALRM被阻止。