简介
ksh_timer 被设计用来帮助 ksh 或 ksh93 脚本管理员或开发人员计算每个函数及其 shell 脚本用户定义部分所用的时间。
以下几个要点定义了 ksh_timer 的功能:
如果在 ksh_timer 中运行脚本,那么该脚本调用的函数是自动计时的。
用户使用 ##KTB <section_name>(这部分的开始)和 ##KTE <section_name>(这部分的结束)在脚本中心 定义相关部分。
给出的时间是总运行时间,不是已使用的时间。
输出包括 ? Main ? 时间,这是脚本的总运行时间。
还包括去向不明的输出 时间,这些时间是花费在函数或用户定义部分之外的 ? Main ? 部分中的时间。
去 向不明的时间还包括计算函数引起的 ksh_timer 开销。
ksh_timer 支持 ksh 和 ksh93 脚本的执行。
使用:ksh_timer [-D] [-c] [-?] [-s] [script name arguments ...]
-D 将 ksh_timer 置于调试模式。
-c 保留原始输出文件 (ksh_timer.<script_name>.<pid>.out)。通常在执行后删除。
-s [script name arguments ...] 脚本文件名和脚本所需参数。
-? 打印使用情况。
重要提示
该接口 (ksh_timer) 是为了用户方便而提供的。本文使用一个样例程序说明了 ksh_timer 的用法和功能,工具 是按原样提供的,我们不提供任何担保和支持。
该工具已在 IBM? AIX? 5.3,6.1 和 7.1 版本上 进行了测试。ksh_timer 可以用于其他操作系统,要实现这一点,必须使用本文安装 小节中提供的源代 码,为该操作系统重新构建 ksh_timer_c 可执行文件。
概述
在启动时,ksh_timer 会读 取命令行提供的输入脚本,然后从中构建以下 3 个文件(源文件、计时器文件和 exec 文件)。
源文件包含原函数定义,并且来自 exec 文件。
计时器文件包含包括计时代码和调 用原函数的封装函数。计时器文件也来自 exec 文件。在下列示例中,原函数 f1 在源文件中被重命名为 f1_orig ,而在计时器文件中,f1 有一个计时代码包含 f1_orig 函数,该函数使我们能够得到原函数 f1 所耗的时间。
exec 文件是源文件和计时器文件的来源,而且包含原始 main 代 码以及用于任何用户定义部分的计时器代码。
当完成这些文件的构建之后,ksh_timer 会运行构 建 exec 文件。运行原始代码时,该函数会计算函数和用户定义部分的运行时间,并将这些时间写入输出 文件。执行完这些操作之后,它会分析输出文件,然后计算函数名、缩进、迭代次数以及这些函数或代码 部分的最小、最大、平均和总运行时间,并将它们显示在屏幕上。
使用以下输入脚本样例: ksh_timer.test_pres
#! /usr/bin/ksh f1() { echo "hello" } #Main ##KTB user_defined_section sleep 1 f1 ##KTE user_defined_section sleep 2 f1
源文件:包含原始函数定义
f1_orig() { echo "hello" }
计时器文件:包含包括计时代码和调用原函数的封装函数
function f1 { time1f1=`/home/albl/ksh_timer/ksh_timer_c` ksh_timer_add_func f1 f1_orig $* f1_orig_rc=$? time2f1=`/home/albl/ksh_timer/ksh_timer_c` let " time3f1 = $time2f1 - $time1f1" print "$indent1:$indent2:$indent3:$indent4:$indent5:$time3f1" >&9 ksh_timer_remove_func f1 return $f1_orig_rc }
exec 文件:包含用于任何用户定义部分的原始代码和计时器代码
. ./ksh_timer.test_pres.413914.source . ./ksh_timer.test_pres.413914.timer time1user_defined_section=`/home/albl/ksh_timer/ksh_timer_c` ksh_timer_add_func user_defined_section sleep 1 f1 time2user_defined_section=`/home/albl/ksh_timer/ksh_timer_c` let "time3user_defined_section=$time2user_defined_section-$time1user_defined_section" print "$indent1:$indent2:$indent3:$indent4:$indent5:$time3user_defined_section" >&9 ksh_timer_remove_func user_defined_section sleep 2 f1
运行该样例得到下列输出:
$ ./ksh_timer -s ./sample ----------------------Start of sample output-------------------------------- hello hello ----------------------End of sample output-------------------------------- ------------------------------------------------------------------------------------------ | function | Minimum | Maximum | Average | Total | | +-------------------+-------------------+------------+-------------------| | or Section |iter.#| time |iter.#| time | time |#iter.| time | |---------------+------+------------+------+------------+------------+------+------------| |Main | |0m03.092834s| |---------------+------+------------+------+------------+------------+------+------------| |-user_defined| 1|0m01.027853s| 1|0m01.027853s|0m01.027853s| 1|0m01.027853s| |--f1 | 1|0m00.003143s| 1|0m00.003143s|0m00.003143s| 1|0m00.003143s| |-f1 | 1|0m00.002652s| 1|0m00.002652s|0m00.002652s| 1|0m00.002652s| |---------------------------------------------------------------------------+------------| |-Unaccounted | |0m02.062329s| ------------------------------------------------------------------------------------------
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 函数
, 脚本
, 计时器
, time
, time函数
, ksh
, 时间
代码运行时间
timertask 注入接口、timerlistener 接口、定时器timer时间设置、c timer时间间隔、timer时间间隔,以便于您获取更多的相关知识。