手册页说明alarm() arranges for a SIGALRM signal to be delivered to the process in _seconds_ seconds.
如果有人(例如用户或ntpd
)在闹钟待处理期间更改了系统时钟,会发生什么?警报的剩余时间是如何计算的?
答案 0 :(得分:3)
首先,大多数负责任的管理员和xntpd通常不会在大块中调整时间。例如,这样做可以打破cron。
但即使他们这样做,警报也会使用setitimer()和ITIMER_REAL - 这意味着它仍然会 等待这么多时钟滴答声。假装系统时钟以100万Hz运行,每秒100万次。好的,所以2秒是200万个实时时钟滴答,系统时间设置的重要性。 setitimer()只是继续将其计数器减少到零。当它达到零时,SIGALARM被提升。从长远来看可能会有相当大的松懈,因为其他进程可能拥有cpu。 alarm()保证在n秒的MINUMUM中熄灭 - 实际经过的时间可能会稍长。
与系统时间混乱会破坏AppWorx或cron等调度软件。