Linux中是否有shell命令以毫秒为单位获取时间?
当前回答
我只是想在Alper的回答中补充一下我必须做的事情:
在Mac上,你需要brew install coreutils,所以我们可以使用gdate。否则在Linux上,它只是日期。这个函数将帮助您执行命令,而无需创建临时文件或任何东西:
function timeit() {
start=`gdate +%s%N`
bash -c $1
end=`gdate +%s%N`
runtime=$(((end-start)/1000000000.0))
echo " seconds"
}
你可以将它与字符串一起使用:
timeit 'tsc --noEmit'
其他回答
用时间和时区显示日期
日期+"%d-%m-%Y %T "。% N % Z”
输出22
日期+“% T。%N"返回当前时间,单位为纳秒。 06:46:41.431857000 日期+“% T。%6N”返回当前时间,其中纳秒四舍五入到前6位数字,即微秒。 06:47:07.183172 日期+“% T。%3N”返回当前时间,将纳秒四舍五入到前3位数字,即毫秒。 06:47:42.773
通常,date命令格式的每个字段都可以指定可选的字段宽度。
date命令在OS X上没有提供毫秒,所以使用了python中的别名
millis(){ python -c "import time; print(int(time.time()*1000))"; }
OR
alias millis='python -c "import time; print(int(time.time()*1000))"'
编辑:跟随@CharlesDuffy的评论。 fork任何子进程都需要额外的时间。
$ time date +%s%N
1597103627N
date +%s%N 0.00s user 0.00s system 63% cpu 0.006 total
Python仍然在改进它的虚拟机启动时间,它没有提前编译的代码(比如日期)快。
在我的机器上,它花了大约30 - 60毫秒(即日期花费的6毫秒的5 -10倍)
$ time python -c "import time; print(int(time.time()*1000))"
1597103899460
python -c "import time; print(int(time.time()*1000))" 0.03s user 0.01s system 83% cpu 0.053 total
我认为awk比python轻量级,所以awk的范围是6ms到12ms(即日期的1x到2x):
$ time awk '@load "time"; BEGIN{print int(1000 * gettimeofday())}'
1597103729525
awk '@load "time"; BEGIN{print int(1000 * gettimeofday())}' 0.00s user 0.00s system 74% cpu 0.010 total
在OS X上,date不支持%N标志,我建议使用Homebrew安装coreutils。这将使您能够访问一个名为gdate的命令,其行为与Linux系统上的date相同。
brew install coreutils
为了获得更“原生”的体验,你可以把这个添加到你的.bash_aliases中:
alias date='gdate'
然后执行
$ date +%s%N
下面是一个在Linux上以毫秒为单位获取时间的便携式hack:
#!/bin/sh
read up rest </proc/uptime; t1="${up%.*}${up#*.}"
sleep 3 # your command
read up rest </proc/uptime; t2="${up%.*}${up#*.}"
millisec=$(( 10*(t2-t1) ))
echo $millisec
输出结果为:
3010
这是一个非常廉价的操作,它与shell内部程序和procfs一起工作。