time命令最常用的使用方式就是在其后面直接跟上命令和参数:
time <command>[<arguments...>]
举个栗子1:
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time sleep 2
real 0m2.005s
user0m0.001s
sys 0m0.002s
小解其意:
real 0m2.005s :sleep这个程序运行耗时为0m2.005s
user0m0.001s : 这个时间代表的是sleep运行在用户态的cpu时间
sys 0m0.002s : 这个时间代表的是sleep运行在核心态的cpu时间。
用户态(User Mode):
在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助 *** 作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。
核心态(Kernel Mode):
在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由 *** 作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。
为什么要区分Kernel Mode 和 User Mode:
隔离保护,使得系统更稳定。
好,讲完用户态和核心态之后,我们来看user time,说过了,这个指的是程序foo运行在用户态的cpu时间,cpu时间不是墙上的钟走过的时间,而是指CPU工作时间。
举个栗子2:
#time -p 不显示单位
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time -p sleep 2
real 2.00
user 0.00
sys 0.00
首先看看time的原型:
time_t
time(time_t
*calptr)
//其说明是:若成功则返回时间值,否则返回-1。时间值总是作为
函数值
返回。如果参数不为空(NULL),则时间值也存放在由calptr指向的单元内。(看似的确多余的,仅仅是看似~~)
第二个函数的原型:
struct
tm
*
localtime
(const
time_t
*calptr)//看到了把~参数是指针,所以必须要传递地址,&t取地址。
(顺带提一下~localtime是将
日历时间
转换成本地时间,会考虑到本地时区和
夏时制
标志,而与此类似的一个函数gmtime则是将日历时间转换成
国际标准时间
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)