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 */

};#include

clock_ttimes(structtms*buf);

注意: 此处计算的时间是时钟滴答数, 需要除以系统时钟滴答数, 得出实际的秒数

3 测试例子:

测试程序如下:#include

#include

#include

#include

#defineBUFFER_SIZE4*1024

intmain()

{

intsc_clk_tck;

sc_clk_tck=sysconf(_SC_CLK_TCK);

structtms begin_tms,end_tms;

clock_tbegin,end;

system("date");

begin=times(&begin_tms);

sleep(2);

end=times(&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 命令来查看程序执行时这三种时间值的消耗笔者写了一个测试程序, 来演示这一个过程:#include

intmain(void)

{

inti;

while(i<=10E7){

i++;

}

return1;

}

程序非常简单了, 就不说明了, 编译成二进制文件 a.out, 使用 time 命令执行, 在笔者的电脑上输入如下信息:$ time./a.out

real0m0.349s

user0m0.340s

sys0m0.004s

其中 real 表示时钟时间, user 表示用户 CPU 时间, sys 表示系统 CPU 时间 time 命令也可以用于系统的命令, 如 time lstime ps 等等

C 语言获取时钟时间用户 CPU 时间和系统 CPU 时间

C 语言里可以通过 times 函数获取这三种时间, times 函数说明如下:#include

clock_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

#include

intmain(void)

{

// 获取滴答数, 在 ubuntu 12.04 下为 100

intclktck=0;

if

((clktck=sysconf(_SC_CLK_TCK))<0){

printf("%s\n","sysconf error");

exit(0);

}

struct

tms  tmsstart,tmsend;

clock_tstart,end;

// 获取开始时间

if

((start=times(&tmsstart))==-1){

printf("%s\n","times error");

exit(0);

}

// 执行系统函数 date

system("date");

// 获取结束时间

if

((end=times(&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.out

SunDec912:50:39CST2012

real:0.01

user:0.00

sys:0.00

child user:0.00

child sys:0.00

其中 child user 就是执行 date 命令消耗的用户 CPU 时间, child sys 就是执行 date 命令消耗的系统 CPU 时间这里会发现这两个值都为 0, 因为滴答数为 100, 只能精确到小数点后面两位, date 的执行时间非常快, 所以就为 0 了如何精确到小数点后面 3 位呢?

来源: http://www.bubuko.com/infodetail-2506242.html

linux 进程的执行时间,Linux 获取进程执行时间相关推荐

  1. python获取当前进程id_Python进程,多进程,获取进程id,给子进程传递参数操作示例...

    本文实例讲述了Python进程,多进程,获取进程id,给子进程传递参数操作.分享给大家供大家参考,具体如下: 线程与线程之间共享全局变量,进程之间不能共享全局变量. 进程与进程相互独立  (可以通过s ...

  2. python psutil 进程cpu_python 模块psutil获取进程信息

    获取进程信息 接续上篇<python 常用内建模块之psutil>安装psutil,并且获取一些基本信息,本篇介绍通过psutil获取到所有进程的详细信息: 1. 获取所有进程ID pri ...

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

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

  4. Linux下通过gettimeofday函数获取程序段执行时间

    在Linux下计算某个程序段执行的时间一般使用gettimeofday函数,此函数的声明在sys/time.h文件中.此函数接收两个结构体参数,分别为timeval.timezone.         ...

  5. linux获取进程信息函数

    Linux进程的管理 <一>获取进程信息函数 进程又称任务,是一个动态的使用系统资源.处于活动状态的应用程序. 进程的管理由进程控制块PCB.进程调度.中断管理.任务队列等组成,它是lin ...

  6. python获取进程编号(目的、获取当前进程编号、根据编号杀死指定进程号、获取当前父进程编号)

    1. 获取进程编号的目的         获取进程编号的目的是验证主进程和子进程的关系,可以得知子进程是由那个主进程创建出来的. 获取进程编号的两种操作 获取当前进程编号 获取当前父进程编号 2. 获 ...

  7. 使用awk获得java进程号,获取进程号并赋值判断进程状态

    一. pgrep是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行.在服务器的配置和管理中,这个工具常被应用,简单明了. 用法: #pgrep [选项] [程序名] pgrep[-flv ...

  8. 获取进程号并赋值判断进程状态

    一. pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行.在服务器的配置和管理中,这个工具常被应用,简单明了. 用法: #pgrep [选项] [程序名] pgrep [-f ...

  9. Linux 如何取进程运行时间,linux -- 获取进程执行时间

    获取进程执行时间 一.时间概念 在linux下进行编程时,可能会涉及度量进程的执行时间.linux下进程的时间值分三种: 时钟时间(real time):指进程从开始执行到结束,实际执行的时间. 用户 ...

最新文章

  1. autoware加载地图数据与使用rosbag包建图(三)
  2. eclipse离线安装插件过程
  3. 牛客网_PAT乙级_1017打印沙漏(20)
  4. 线性结构常规操作(四)
  5. Docker学习笔记之浅谈虚拟化和容器技术
  6. 流浪北京的日子(二)
  7. python运维实战pdf_python运维实例.pdf
  8. breadweb控制台下载_路由器刷breed web控制台助手
  9. pandas计算相关系数
  10. dataworks 生成表血缘依赖
  11. 面试必备之Mysql索引底层原理分析
  12. 零遁NAS伴侣实现WOL远程唤醒
  13. 计算机拓展训练论文,素质拓展训练论文拓展训练论文
  14. Unity 2018之ShaderGraph使用基础
  15. php程序端的采集,php采集程序
  16. 【C++】0314算法阿里笔试题
  17. 2017.0311.数字电路与系统-数据选择器分配器的理解
  18. 2022年3月19日:有关版本控制与 Git 结合使用的简介--Git介绍
  19. angular 路由项目例子
  20. ologit模型与logit_mlogit模型或者ologit模型结果RRR的输出

热门文章

  1. 高斯曲率求表面极值点
  2. java md2_java中加密的实现方法(MD5,MD2,SHA)
  3. 使用dwebsocket在Django中使用Websocket
  4. 人工智能超强面经:文本检测与GAN篇(含答案)
  5. 少儿编程100讲轻松学python(六)-pycharm怎么汉化?
  6. css3优惠卷上方锯齿_css3怎么实现锯齿边框?
  7. 大津阈值分割matlab实验,OTSU(大津法)分割源程序(MATLAB版)
  8. 解决maven项目Cannot change version of project facet Dynamic web module to 3.0
  9. Vue 中computed 与 methods 区别
  10. React.js 入门与实战课程思维导图