0

手册页说alarm() arranges for a SIGALRM signal to be delivered to the process in _seconds_ seconds.如果有人(例如用户或ntpd)在警报未决时更改系统时钟会发生什么?闹钟的剩余时间是如何计算的?

4

1 回答 1

3

首先,最负责任的管理员和 xntpd 通常不会大量调整时间。例如,这样做会破坏 cron。

但即使他们这样做,alarm 也会使用 setitimer() 和 ITIMER_REAL - 这意味着它仍然会等待这么多时钟滴答声。假设系统时钟运行在 100 万赫兹,每秒 100 万个滴答声。好的,所以 2 秒是 200 万个实时时钟滴答,无论系统时间设置为多少。setitimer() 只是继续将其计数器递减为零。当它达到零时,会引发 SIGALARM。在这方面可能会有相当大的松弛,因为其他进程可能有 cpu。alarm() 保证在最少 n 秒内触发 - 实际经过的时间可能会更长一些。

乱用系统时间会破坏 AppWorx 或 cron 等调度软件。

于 2010-11-24T18:02:57.323 回答