1

这是我正在学习的考试的示例问题 - 问题是代码有什么问题。我在想可能是警报(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);
}
4

1 回答 1

3

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

于 2012-08-14T14:19:28.740 回答