这是我正在研究的一个考试的例子问题-问题是代码有什么问题。我想可能是警报(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);
}

最佳答案

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

10-08 00:17