我想在几种不同条件下在linux shell中执行某些操作,并能够输出每次执行的执行时间。

我知道我可以编写一个可以执行此操作的perl或python脚本,但是有什么方法可以在shell中执行它吗? (碰巧是bash)


#1楼

#!/bin/bash
START=$(date +%s)
# do something
# start your script work here
ls -R /etc > /tmp/x
rm -f /tmp/x
# your logic ends here
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

#2楼

如果需要更高的精度,请在date使用%N (对于差异使用bc ,因为$(())仅处理整数)。

方法如下:

start=$(date +%s.%N)
# do some stuff here
dur=$(echo "$(date +%s.%N) - $start" | bc)printf "Execution time: %.6f seconds" $dur

例:

start=$(date +%s.%N); \sleep 0.1s; \dur=$(echo "$(date +%s.%N) - $start" | bc); \printf "Execution time: %.6f seconds\n" $dur

结果:

Execution time: 0.104623 seconds

#3楼

使用内置的time关键字:

$ help timetime: time [-p] PIPELINEExecute PIPELINE and print a summary of the real time, user CPU time,and system CPU time spent executing PIPELINE when it terminates.The return status is the return status of PIPELINE.  The `-p' optionprints the timing summary in a slightly different format.  This usesthe value of the TIMEFORMAT variable as the output format.

例:

$ time sleep 2
real    0m2.009s
user    0m0.000s
sys     0m0.004s

#4楼

您可以使用time(1)获得比bash内置time (Robert Gamble提到的时间 )更为详细的信息。 通常这是/usr/bin/time

编者注:为了确保您调用的是外部实用程序 time而不是shell的time 关键字 ,请以/usr/bin/time调用它。
time是POSIX强制的实用程序 ,但支持-p是唯一需要的选项。
特定的平台实现特定的非标准扩展: -vGNUtime实用程序一起使用,如下所示(问题标记为linux );BSD / macOS实现使用-l产生类似的输出-参见man 1 time

详细输出示例:


$ /usr/bin/time -v sleep 1Command being timed: "sleep 1"User time (seconds): 0.00System time (seconds): 0.00Percent of CPU this job got: 1%Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.05Average shared text size (kbytes): 0Average unshared data size (kbytes): 0Average stack size (kbytes): 0Average total size (kbytes): 0Maximum resident set size (kbytes): 0Average resident set size (kbytes): 0Major (requiring I/O) page faults: 0Minor (reclaiming a frame) page faults: 210Voluntary context switches: 2Involuntary context switches: 1Swaps: 0File system inputs: 0File system outputs: 0Socket messages sent: 0Socket messages received: 0Signals delivered: 0Page size (bytes): 4096Exit status: 0

#5楼

如果打算稍后使用时间进行计算,请学习如何使用/usr/bin/time-f选项输出节省时间的代码 。 这是我最近用来获取和分类整个学生程序的执行时间的一些代码:

fmt="run { date = '$(date)', user = '$who', test = '$test', host = '$(hostname)', times = { user = %U, system = %S, elapsed = %e } }"
/usr/bin/time -f "$fmt" -o $timefile command args...

后来我连接了所有$timefile文件,并将输出通过管道$timefile到Lua解释器中 。 您可以使用Python或bash或您喜欢的语法进行相同的操作。 我喜欢这种技术。


#6楼

对于逐行增量测量,请尝试gnomon 。

一个命令行实用程序,有点像moreutils的ts,用于将时间戳信息放在另一个命令的标准输出之前。 对于长时间运行的过程很有用,在该过程中您需要花费很长时间的历史记录。

您还可以使用--high和/或--medium选项指定以秒为单位的长度阈值,超过该阈值,gnomon将以红色或黄色突出显示时间戳。 您还可以做其他一些事情。


#7楼

您可以使用timesubshel​​l ()

time (for (( i=1; i<10000; i++ )); doecho 1 >/dev/nulldone
)

或在同一外壳{}

time {for (( i=1; i<10000; i++ )); doecho 1 >/dev/nulldone
}

#8楼

如果只需要秒精度,则可以使用内置的$SECONDS变量,该变量计算shell运行的秒数。

while true; dostart=$SECONDSsome_long_running_commandduration=$(( SECONDS - start ))echo "This run took $duration seconds"if some_condition; then break; fi
done

#9楼

一种可能的简单方法(可能无法满足不同用户的需求)是使用Shell PROMPT。它是一种简单的解决方案,在某些情况下可能会有用。 您可以使用bash提示功能,如下例所示:

export PS1='[\t \u@\h]\$'

上面的命令将导致将shell提示符更改为:

[HH:MM:SS username@hostname]$

每次您运行命令(或按Enter键)返回到shell提示时,该提示都会显示当前时间。

笔记:
1)请注意,如果您在键入下一条命令之前等待了一段时间,则需要考虑该时间,即,shell提示符中显示的时间是显示shell提示符时的时间戳,而不是您输入命令时的时间戳。 一些用户选择按Enter键以获取具有新时间戳记的新提示,然后再准备下一条命令。
2)还有其他可用的选项和修饰符可用于更改bash提示,有关更多详细信息,请参考(man bash)。


#10楼

方式是

$ > g++ -lpthread perform.c -o per
$ > time ./per

输出是>>

real    0m0.014s
user    0m0.010s
sys     0m0.002s

在外壳中获取程序执行时间相关推荐

  1. python获取耗时的shell_python获取耗时的shell_关于Linux:在shell中获取程序执行时间...

    我想在Linux shell中在几个不同的条件下执行一些东西,并且能够输出每次执行的执行时间. 我知道我可以编写一个Perl或python脚本来完成这个任务,但是有没有一种方法可以在shell中完成呢 ...

  2. python程序执行时间_用于在Python中查找程序执行时间的程序

    python程序执行时间 The execution time of a program is defined as the time spent by the system to execute t ...

  3. C#中获取程序当前路径的集中方法

    string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名.   string str2=Enviro ...

  4. C#中获取程序当前路径的方法[转]2011-10-25 15:40C#中获取程序当前路径的方法

    System.Diagnostics命名空间 string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件 ...

  5. 在WPF中获取程序的专用工作集内存 PerformanceCounter

    使用 PerformanceCounter 获取程序的专用工作集内存并不难,但是就是得找一下属性, 通过 CategoryName 遍历 InsanceName 再通过它们遍历 CounterName ...

  6. Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间

    1.问:知道程序执行时间我们能够做什么? 在<C++应用程序性能优化>一书中,假设大家读过相信大家一定对性能优化这一块很上心,文中总是对优化前后的时间对照很直观给我们一个感受. 那么我们怎 ...

  7. 获取C#中方法的执行时间及其代码注入

    在优化C#代码或对比某些API的效率时,通常需要测试某个方法的运行时间,可以通过DateTime来统计指定方法的执行时间,也可以使用命名空间System.Diagnostics中封装了高精度计时器Qu ...

  8. Delphi中准确记录程序执行时间

    知道如何在你的Windows和跨平台应用程序中获得一个操作的确切执行时间的信息,在各种情况下都是有用的.例如,当你需要向用户展示一个长的操作的执行时间时,它可能是必要的(顺便说一下,在这种情况下,很少 ...

  9. Silverlight:如何在程序中获取网站的根目录

    如果需要在Silverlight程序中获取当前网站的根目录,不能使用HttpContext.Current这样的方式,而需要用 @HostingEnvironment.ApplicationPhysi ...

最新文章

  1. Springboot中给图片添加文字水印
  2. mysql主主复制+keepalived 打造高可用mysql集群
  3. std::ref std::cref
  4. start ssh-agent
  5. ssm使用全注解实现增删改查案例——EmpServiceImpl
  6. Lua语法基础(1)---简介、基本数据类型、表达式
  7. python列表添加数字_Python-识别列表中的连续数字组
  8. setTimeOut与setInterval的区别
  9. Mac安装redis与后台启动
  10. 设计模式-责任链模式(17)
  11. vue2.0 实现导航守卫(路由守卫)
  12. 动态lacp和静态lacp区别_3分钟弄懂LACP实现原理!
  13. 为资产分类定义折旧范围_SAP FICO-AA资产知识要点.doc
  14. 计算机保研厦大面试,保研其实不难:他们保研人大、厦大、山大,有这些经验,值得收藏!...
  15. 写作技巧~100段作文排比句(61-80段),考试一定用得上,赶紧收藏!
  16. canva画图 图片居中裁剪_html5 canvas 自定义画图裁剪图片
  17. 计算机所有接口都没反应,如何解决Win7系统USB接口没反应的问题
  18. 一些忠告给想转行当程序员的你
  19. 前端-html 点击 跳转页面
  20. 【星辰傀儡线·命运环·卷二 尘埃】 7 金团

热门文章

  1. 算法------------完全平方数(Java版本)
  2. 【剑指offer-Java版】31连续子数组的最大和
  3. PHP学习笔记-Cookie
  4. 人工智能实践:TensorFlow笔记学习(三)——TensorFlow框架
  5. (005) java后台开发之Mac终端命令运行java
  6. Docker Toolbox替换默认docker machine的存储位置
  7. 复制订阅服务器和 AlwaysOn 可用性组 (SQL Server)
  8. 【bzoj1444】[Jsoi2009]有趣的游戏 AC自动机+矩阵乘法
  9. jquery点击元素之外触发事件
  10. 测试用例实例--常见功能测试点(转)