这是我正在研究的考试的一个示例问题 - 问题是代码有什么问题。我想它可能是警报(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);
}
答案 0 :(得分:3)
此处的问题(可能只是其中之一)是您在空信号集上挂起进程,sigset(3)
不会填充它。 sigsuspend(2)
修改了过程信号掩码,因此SIGALRM
被阻止。