警报(int)在 while 循环中不起作用

alarm(int) doesn't work in a while loop

我正在尝试执行这段代码:

signal(SIGALRM,handler);
alarm(1);
while(1){}

handler 函数只打印 "test".

在这种情况下,

alarm(1)最终只会执行一次。我试着把它放在循环中,它似乎根本没有被执行!

我对信号有点陌生。有人可以向我解释这是怎么发生的吗?

如果您只是将 alarm(1) 放入示例的循环中,您将在每次调用的几微秒内无限多次调用 alarm(1)。然后 this 发生:

If an alarm has already been set with alarm() but has not been delivered, another call to alarm() will supersede the prior call.

即,警报在循环的每次迭代中被清除。由于您的循环永远运行,因此永远不会永久设置警报。