alarm (2) - что он делает, когда кто-то меняет системное время во время ожидания? - PullRequest
0 голосов
/ 24 ноября 2010

На странице руководства сказано, что alarm() arranges for a SIGALRM signal to be delivered to the process in _seconds_ seconds. Что произойдет, если кто-то (например, пользователь или ntpd) изменит системные часы во время ожидания будильника? Как учитывается оставшееся время на тревоге?

1 Ответ

3 голосов
/ 24 ноября 2010

Во-первых, большинство ответственных администраторов и xntpd обычно не собираются корректировать время большими кусками.Это нарушает, например, cron.

Но даже если бы они это сделали, будильник использует setitimer () с ITIMER_REAL - это означает, что он все равно будет ждать столько тактов.Представьте, что системные часы работают с частотой 1 миллион Гц, один миллион тиков в секунду.Итак, 2 секунды - это 2 миллиона тиков часов реального времени, независимо от того, какое системное время установлено.setitimer () просто продолжает уменьшать свой счетчик до нуля.Когда он достигает нуля, SIGALARM повышается.На длинной стороне может быть значительная слабость, потому что у других процессов может быть процессор.Аварийная сигнализация () гарантированно сработает в течение МИНУМА, равного n секундам - ​​фактическое истекшее время может быть немного больше.

Работа с программным обеспечением для планирования прерываний системного времени, например AppWorx или cron.

...