这是我正在学习的考试的示例问题 - 问题是代码有什么问题。我在想这可能是警报(3),导致它跳入 while 循环的延迟?或者可能不应该使用 SIGALRM 从 sleep 中醒来,但我认为这不是一个有效的观点。感谢任何反馈,我发现很难找到与此类内容相关的相关信息。
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
被阻止。
关于C信号代码混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954171/