我需要编写一个小应用程序,它需要检测系统时间是否被另一个应用程序/用户更改,并在检测到时立即执行某些操作(可能记录时间已更改的数据,以及有关哪个应用程序/用户更改它的信息)。
如何实现这一点?
- 我有丰富的 shell 脚本、c 编程经验,并且具有初级的 python 编程经验。
- 我不需要知道它何时被改变,只需要知道谁/什么改变了它。
- 系统使用 NTP 来同步时间,但任何人/任何应用程序也可以更改时间(例如:使用简单的“date”命令)。
答案1
我认为这篇文章可以回答你的问题:通知用户空间时间变化。但请注意,文章中提到的补丁是相当新的,因此您必须先检查您的 Linux 内核版本。
如果你的内核不是支持用户空间通知机制,那么可以实现如下算法(伪代码):
time = gettimeofday()
loop:
sleep 1 second
new_time = gettimeofday()
if (time_diff(new_time, time) > 2 seconds) then
alert System time has changed by an external user/process!
time = new_time
goto loop
希望这可以帮助。
答案2
您想使用 timerfd_settime() 和TFD_TIMER_CANCEL_ON_SET
(timerfd_settime(2)
):
TFD_TIMER_CANCEL_ON_SET
If this flag is specified along with TFD_TIMER_ABSTIME and the
clock for this timer is CLOCK_REALTIME or CLOCK_REAL‐
TIME_ALARM, then mark this timer as cancelable if the real-
time clock undergoes a discontinuous change (settimeofday(2),
clock_settime(2), or similar). When such changes occur, a
current or future read(2) from the file descriptor will fail
with the error ECANCELED.
答案3
系统调用追踪器做你想做的事。你可以使用/修改该代码。