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