linux 如何在shell中获取clock_gettime(2)时钟?

mitkmikd  于 2023-10-16  发布在  Linux
关注(0)|答案(3)|浏览(131)

date没有这样的选项
/proc/uptime是基于引导的,不是单调的。
最后我找到了cat /proc/timer_list | grep now,它产生了nsecs的数量,通过ktime_get得到,如果我理解正确的话,它返回单调时间,但这很麻烦。

**update:**返回值必须与clock_gettime相同

ioekq8ef

ioekq8ef1#

看起来它在Python 3.3中可用:http://www.python.org/dev/peps/pep-0418/
如果做不到这一点,你可以写一个小的C程序来调用clock_gettimehttp://linux.die.net/man/3/clock_gettime

cwtwac6a

cwtwac6a2#

如果你每次都写一整行,咨询/proc/uptime只会很麻烦。为什么不像这样 Package 一下:

$ alias now="awk '/^now/ {print \$3; exit}' /proc/timer_list"
$ now
396751009584948

这也避免了猫的无用使用。

kadbb459

kadbb4593#

这并没有回答当前的问题,而是回答了原来的问题:“你怎么知道的?”“因此,它被保留下来,因为它到目前为止对一些人有用。
在shell中,你可以使用date工具:

date +%s.%N
date +%s%N
nanoseconds_since_70=$(date +%s%N)

从男性日期:

%s     seconds since 1970-01-01 00:00:00 UTC
       %N     nanoseconds (000000000..999999999)

纳秒部分以正确的方式补充了秒:当%N从999999999变为0时,%s递增一秒。我没有一个参考(请编辑,如果你能找到它),但只是工作。

日期工具x clock_gettime

是的,日期实用程序返回CLOCK_GETTIME,但不返回CLOCK_MONOTONIC。然而,CLOCK_MONOTONIC并不是一个很好的单调时钟,因为它会受到NTP转换的影响(来自man clock_getttime):

CLOCK_MONOTONIC -- Clock  that  cannot  be set and represents monotonic time
 since some unspecified starting point.  This clock is not affected by 
 discontinuous jumps in the system time (e.g., if the system administrator 
 manually changes the clock), but is affected by the incremental adjustments
 performed by adjtime(3) and NTP.

CLOCK_GETTIME类似于CLOCK_MONOTONIC,除了它会受到系统管理员对系统时钟所做的更改的影响。虽然这比CLOCK_MONOTIC更糟糕,但这是我们可以使用纯shell解决方案获得的最佳结果。
较新的系统(内核>=2.6.28)有一个更好的解决方案:CLOCK_MONOTIC_RAW(因为这是在2010年编写的,所以没有广泛使用)。

了解更多

相关问题