8

我看不到这样的选择date

/proc/uptime是基于引导的,而不是单调的。

最后我发现如果我理解正确的话,cat /proc/timer_list | grep now它会产生 nsecs 的数量,这是通过ktime_get返回单调时间获得的,但这很麻烦。

更新:返回的值必须与返回的相同clock_gettime

4

3 回答 3

8

这并没有回答当前的问题,而是回答了原来的问题。因此,它被保留,因为到目前为止它对某些人有用。

在 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

请注意,数字不受时区变化的影响,但会受到系统时钟变化的影响,如系统管理员所做的更改、NTP 和 adjtime 函数。然而,clock_gettime 函数中的 CLOCK_MONOTONIC 也会受到影响,除了管理员更改。

 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_MONOTIC_RAW。尽管如此,这是一个按要求提供的外壳解决方案。

了解更多

维基百科中的单调函数

@caf 用户对 CLOCK_REALTIME 和 CLOCK_MONOTONIC 之间的差异的回答?

CLOCK_MONOTONIC represents the absolute elapsed wall-clock time since some
arbitrary, fixed point in the past. It isn't affected by changes in the 
system time-of-day clock. 

If you want to compute the elapsed time between two events observed on the one
machine without an intervening reboot, CLOCK_MONOTONIC is the best option.
于 2013-09-05T11:07:26.120 回答
7

/proc/uptime如果您每次都写出完整的行,那么咨询只会很麻烦。为什么不这样总结:

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

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

于 2013-09-07T13:52:47.377 回答
6

看起来它在 python 3.3 中可用:http: //www.python.org/dev/peps/pep-0418/

如果做不到这一点,你可以编写一个小的 C 程序调用clock_gettime: http: //linux.die.net/man/3/clock_gettime

于 2013-08-28T14:21:58.187 回答