我的电脑说:
$uptime
10:20:35 up 1:46, 3 users, load average: 0,03, 0,10, 0,13
如果我最后检查,我看到:
reboot system boot 3.19.0-51-generi Tue Apr 12 08:34 - 10:20 (01:45)
然后我检查:
$ls -l /var/log/boot.log
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log
然后我在/ var / log / syslog中看到今天的第一行是:
Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start
所以所有这些似乎都集中在我的机器启动时间的8:34.
但是,我想知道:正常运行时间使用的确切时间是多少?正常运行时间是启动和检查某个文件的过程还是硬件上的某些内容?
我正在运行Ubuntu 14.04.
解决方法:
在我的系统上,它从/ proc / uptime获得正常运行时间:
$strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY) = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY) = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY) = 4
10:52:38 up 3 days, 23:38, 4 users, load average: 0.00, 0.02, 0.05
06001
proc文件系统包含一组伪文件.这些不是真正的文件,它们看起来像文件,但它们包含由内核直接提供的值.每次读取文件(例如/ proc / uptime)时,其内容都会即时重新生成. proc文件系统是内核的接口.
在line 49的文件fs / proc / uptime.c的linux内核源代码中,您会看到一个函数调用:
proc_create("uptime", 0, NULL, &uptime_proc_fops);
这将创建一个称为正常运行时间的proc filesystem entry(procfs通常安装在/ proc下),并将一个函数与它相关联,该函数定义该伪文件上的有效文件操作以及与它们相关的函数.在正常运行时间,它只是read()和open()操作.但是,如果您追溯功能,则最终将计算here,即计算正常运行时间.
在内部,有一个定时器中断,定期更新系统正常运行时间(除了其他值).计时器中断滴答的时间间隔由预处理器 – 宏HZ定义,其精确值在内核config file中定义并在编译时应用.
空闲时间和CPU周期数与频率HZ(每秒周期数)相结合可以计算自上次启动以来的数量(秒).
解决您的问题:“正常运行时间”何时开始计时?
由于正常运行时间是一个内核内部值,它在每个周期都会加速,因此它会在内核初始化时开始计数.也就是说,当第一个周期结束时.甚至在安装任何东西之前,直接在引导加载程序控制内核映像之后.