太仓公司网站建设电话,下班后做兼职任务网站,wordpress 开启评论,怎么用网网站模板做网站Linux 获取进程执行时间1 前言测试一个程序的执行时间, 时间包括用户 CPU 时间系统 CPU 时间时钟时间之前获取之前时间都是在程序的 main 函数用 time 函数实现, 这个只能粗略的计算程序的执行时间, 不能准确的获取其他时间在看 APUE 时, 书中有关程序时间测试程序, 非常正规, …Linux 获取进程执行时间1 前言测试一个程序的执行时间, 时间包括用户 CPU 时间系统 CPU 时间时钟时间之前获取之前时间都是在程序的 main 函数用 time 函数实现, 这个只能粗略的计算程序的执行时间, 不能准确的获取其他时间在看 APUE 时, 书中有关程序时间测试程序, 非常正规, 提供这三个时间如是, 上网搜了一下, 进行总结一下2 获取方法有两种方法可以获取, 第一种是用 time 命令, time 进程第二种是通过在程序中进行记录, 首先利用 sysconf 函数获取时钟滴答数, 再用 times 获取 tms 结构查看 times 函数, man 2 tms, 得到 tms 结构定义和 times 函数声明如下:structtms{clock_ttms_utime;/* user time */clock_ttms_stime;/* system time */clock_ttms_cutime;/* user time of children */clock_ttms_cstime;/* system time of children */};#includeclock_ttimes(structtms*buf);注意: 此处计算的时间是时钟滴答数, 需要除以系统时钟滴答数, 得出实际的秒数3 测试例子:测试程序如下:#include#include#include#include#defineBUFFER_SIZE4*1024intmain(){intsc_clk_tck;sc_clk_tcksysconf(_SC_CLK_TCK);structtms begin_tms,end_tms;clock_tbegin,end;system(date);begintimes(begin_tms);sleep(2);endtimes(end_tms);printf(real time: %lf\n,(end-begin)/(double)sc_clk_tck);printf(user time: %lf\n,(end_tms.tms_utime-begin_tms.tms_utime)/(double)sc_clk_tck);printf(sys time: %lf\n,(end_tms.tms_stime-begin_tms.tms_stime)/(double)sc_clk_tck);printf(child user time: %lf\n,(end_tms.tms_cutime-begin_tms.tms_cutime)/(double)sc_clk_tck);printf(child sys time: %lf\n,(end_tms.tms_cstime-begin_tms.tms_cstime)/(double)sc_clk_tck);return0;}测试结果如下所示:采用 time 命令, 测试结果如下所示:4 参考网址http://www.01happy.com/linux-process-time/http://www.01happy.com/c-get-process-time/linux 查看进程的时钟时间用户 CPU 时间和系统 CPU 时间在 linux 下进行编程时, 可能会涉及度量进程的执行时间 linux 下进程的时间值分三种:时钟时间(real time): 指进程从开始执行到结束, 实际执行的时间用户 CPU 时间(user CPU time): 指进程中执行用户指令所用的时间, 也包括子进程系统 CPU 时间(system CPU time): 指为进程执行内核程序所经历的时间, 例如调用 read 和 write 内核方法时, 消耗的时间就计入系统 CPU 时间在 linux 下, 可以使用 time 命令来查看程序执行时这三种时间值的消耗笔者写了一个测试程序, 来演示这一个过程:#includeintmain(void){inti;while(i10E7){i;}return1;}程序非常简单了, 就不说明了, 编译成二进制文件 a.out, 使用 time 命令执行, 在笔者的电脑上输入如下信息:$ time./a.outreal0m0.349suser0m0.340ssys0m0.004s其中 real 表示时钟时间, user 表示用户 CPU 时间, sys 表示系统 CPU 时间 time 命令也可以用于系统的命令, 如 time lstime ps 等等C 语言获取时钟时间用户 CPU 时间和系统 CPU 时间C 语言里可以通过 times 函数获取这三种时间, times 函数说明如下:#includeclock_ttimes(structtms*buf);参数 tms 的结构如下:structtms{clock_ttms_utime;/* user time */clock_ttms_stime;/* system time */clock_ttms_cutime;/* user time of children */clock_ttms_cstime;/* system time of children */};其中时间都是以滴答数 (clock tick) 为单位, 详细可以用 man 2 times 查看帮助手册下面的示例用来计算执行系统命令 date 消耗的三种时间值#include#include#include#includeintmain(void){// 获取滴答数, 在 ubuntu 12.04 下为 100intclktck0;if((clktcksysconf(_SC_CLK_TCK))0){printf(%s\n,sysconf error);exit(0);}structtms tmsstart,tmsend;clock_tstart,end;// 获取开始时间if((starttimes(tmsstart))-1){printf(%s\n,times error);exit(0);}// 执行系统函数 datesystem(date);// 获取结束时间if((endtimes(tmsend))-1){printf(%s\n,times error);exit(0);}printf(real: %7.2f\n,(end-start)/(double)clktck);printf(user: %7.2f\n,(tmsend.tms_utime-tmsstart.tms_utime)/(double)clktck);printf(sys: %7.2f\n,(tmsend.tms_stime-tmsstart.tms_stime)/(double)clktck);printf(child user: %7.2f\n,(tmsend.tms_cutime-tmsstart.tms_cutime)/(double)clktck);printf(child sys: %7.2f\n,(tmsend.tms_cstime-tmsstart.tms_cstime)/(double)clktck);return1;}编译执行上面的程序, 输出如下:$./a.outSunDec912:50:39CST2012real:0.01user:0.00sys:0.00child user:0.00child sys:0.00其中 child user 就是执行 date 命令消耗的用户 CPU 时间, child sys 就是执行 date 命令消耗的系统 CPU 时间这里会发现这两个值都为 0, 因为滴答数为 100, 只能精确到小数点后面两位, date 的执行时间非常快, 所以就为 0 了如何精确到小数点后面 3 位呢?来源: http://www.bubuko.com/infodetail-2506242.html