如何知道linux中的执行时间

时间:2014-02-16 11:45:16

标签: linux bash shell scheduled-tasks fork

假设我在一个名为launcher.sh的脚本中启动了三个脚本(a.sh b.sh c.sh):

first=`date +%s`

./a.sh &
./b.sh &
./c.sh &

final=`date +%s`

executionTime=`echo "scale=3;($final - $first)/3600" | bc`

echo $executionTime

我知道上面的脚本无效,因为launcher.sh会在启动a.sh,b.sh和c.sh后立即完成。在没有“&”的情况下启动a.sh,b.sh和c.sh会浪费时间,因为他们不必相互等待。

假设它们的执行时间分别为5秒,10秒和7秒,我怎样才能获得10秒的总执行时间?

3 个答案:

答案 0 :(得分:4)

使用wait

first=`date +%s`

./a.sh &
./b.sh &
./c.sh &

wait

...

引用help wait

  

wait: wait [id]

Wait for job completion and return exit status.

Waits for the process identified by ID, which may be a process ID or a
job specification, and reports its termination status.  If ID is not
given, waits for all currently active child processes, and the return
status is zero.  If ID is a a job specification, waits for all processes
in the job's pipeline.

Exit Status:
Returns the status of ID; fails if ID is invalid or an invalid option is
given.

答案 1 :(得分:2)

linux附带了time命令,该命令专门针对这种确切用法而设计。只需致电time yourscript

当您的启动器脚本在后台启动进程时,仅time是不够的。正如@devnull所述,有wait命令阻止调用,直到所有子进程都终止。

有一种简单的方法来组合等待和时间,无需修改启动器脚本,也无需手动停止时间:

time `./launcher.sh;wait `

应该这样做。

(尝试使用一个最小的例子。只要你在子shell中执行启动器+等待(使用``),这将起作用(但是如果它确实输出了什么,你就会从launcerh脚本中丢失输出)) p>


最小例子:

test1.sh

./test2.sh &

test2.sh

sleep 10

结果:

  

$ time`。/ test1.sh; wait`

     

真实0m10.004s
  用户0m0.001s
  sys 0m0.001s

答案 2 :(得分:0)

在退出脚本之前写一下

echo $SECONDS

或者在终端窗口中运行脚本,输入

$> time your_script