Bash参考手册说
使用
time
作为保留字允许shell内建,外壳的功能,和管道的定时。外部time
命令无法轻松计时这些时间。
外部命令time
时间可以做什么?
只有一个简单的外部命令?没有其他的?
哪个规则阻止它计时其他内容?规则是属于shell(bash)还是属于外部命令的实现time
?
顺便说一句,我正在运行Ubuntu,time
Debian也是如此。
Bash的保留字可以time
计时所有可以运行的内容吗?如果没有,那该不该几点呢?
外部设备time
可以计时但保留字time
不能计时的是什么?
我的答案是关于Linux的。
- 哪个规则阻止它计时其他内容?
我猜它只获取进程的时间信息,因为它实际上使用wait4
系统调用来获取此时间信息。的第一个参数wait4
是进程的pid。因此,请/usr/bin/time
务必先致电execve
,然后再等待4。
顺便一提:
execve()执行文件名指向的程序。filename必须是二进制可执行文件,或者是以以下形式的行开头的脚本:#!解释器[optional-arg]
所以/ usr / bin / time需要一些可以由 execve
- Bash的保留字时间可以计时所有可以运行的内容吗?
我猜是。它被实现为两组呼叫:
10:06:03 getrusage(RUSAGE_SELF, {ru_utime={0, 152976}, ru_stime={0, 465929}, ru_maxrss=4052, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=6214, ru_majflt=1, ru_nswap=0, ru_inblock=368, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=6349, ru_nivcsw=12}) = 0
10:06:03 getrusage(RUSAGE_CHILDREN, {ru_utime={2, 259656}, ru_stime={1, 888712}, ru_maxrss=21176, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=64297, ru_majflt=4, ru_nswap=0, ru_inblock=272, ru_oublock=368, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=56077, ru_nivcsw=386}) = 0
运行命令或内置
10:06:04 getrusage(RUSAGE_SELF, {ru_utime={0, 152976}, ru_stime={0, 476927}, ru_maxrss=4052, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=6243, ru_majflt=1, ru_nswap=0, ru_inblock=368, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=6399, ru_nivcsw=13}) = 0
10:06:04 getrusage(RUSAGE_CHILDREN, {ru_utime={2, 271654}, ru_stime={1, 903710}, ru_maxrss=21176, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=64514, ru_majflt=4, ru_nswap=0, ru_inblock=272, ru_oublock=368, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=56079, ru_nivcsw=406}) = 0
所以我想bash
只是计算出一个差异并打印出来。通过这种方式,它可以测量任何东西,例如自己的内置文件或子进程
- 外部时间可以计时但保留字时间不能计时的是什么?
实际上,这两个系统调用getrusage
,并wait4
从内核获得结构rusage使用。但是bash time
,从此结构中打印有限数量的字段。这是从man 1 time
:
注意:某些外壳程序(例如bash(1))具有内置的time命令,该命令提供的功能少于此处描述的命令。
$/usr/bin/time -v seq 10000
Command being timed: "seq 10000"
User time (seconds): 0.01
System time (seconds): 0.01
Percent of CPU this job got: 24%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.12
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2640
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 199
Voluntary context switches: 8
Involuntary context switches: 24
Swaps: 0
File system inputs: 0
File system outputs: 8
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句