linux 进程的执行时间,Linux 获取进程执行时间

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;

}

测试结果如下所示:

ab7653affab982b574eb7acc55df2e04.gif

采用 time 命令, 测试结果如下所示:

ab7653affab982b574eb7acc55df2e04.gif

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java环境变量的设置

1.计算机->属性->高级系统设置->环境变量 2.设置JAVA_HOME和path&#xff0c;1.5之后的JDK可以不设置classpath 3.JAVA_HOME的路径是JDK的安装路径 4.在系统变量里面找到path&#xff0c;然后点击修改&#xff0c;在最后面添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 5…

华为抢购助手_华为荣耀20系列手机采用的五项新科技,科普简介

5月底荣耀20系列在上海发布&#xff0c;荣耀20系列旗舰手机拥有五项荣耀自主研发的新科技&#xff0c;包括LinkTurbo网络聚合加速、超级NFC、方舟编译器、人性化YOYO智慧生命体&#xff0c;超级蓝牙。下面分别介绍一下这五项新科技。LinkTurbo网络聚合加速先来科普一下LinkTurb…

Flex弹性布局

1 Flex: 弹性布局 (转) 任何一个容器都可以指定为 Flex 布局。 1 .box {2  display: flex;3 } 行内元素也可以使用 Flex 布局。 1 .box{2 display: inline-flex;3 } 注意&#xff0c;设为 Flex 布局以后&#xff0c;子元素的 float、 clear 和 vertical-align 属性将失效…

firewallD卸载Linux,在Ubuntu 18.04/16.04系统上安装和使用Firewalld的方法

本文介绍Firewalld在Ubuntu 18.04或Ubuntu 16.04发行版上的安装方法及基本用法。简介Firewalld是Linux防火墙管理工具&#xff0c;支持IPv4、IPv6、以太网桥和IPSet防火墙设置&#xff0c;它充当Linux内核的netfilter框架的前端&#xff0c;同时Firewalld是RHEL 7系列上的默认防…

PCGen的垃圾收集分析

介绍 我决定结合我的两个软件爱好&#xff0c;并在PCGen上进行一些分析&#xff0c; PCGen是一种流行的基于Java的开放源代码角色生成器&#xff0c;用于角色扮演游戏。 我用Censum &#xff0c;我们&#xff08; jClarity的&#xff09;新的垃圾收集日志分析工具来进行分析。 …

springboot不会运行gc_SpringBoot 和JVM 调优(深度好文,建议收藏)

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]项目调优作为一名工程师&#xff0c;项目调优这事&#xff0c;是必须得熟练掌握的事情。在SpringBoot项目中&#xff0c;调优主要通过配置文件和配置JVM的参数的方式进行。一、修改配置文件关于修改配置文件 application.p…

3dobject用什么打开_第一次用开塞露是什么感觉?网友:像打开了新世界的大门

第一次用开塞露是什么感觉&#xff1f;网友:像打开了新世界的大门我妈说我小时候便秘去医院&#xff0c;医生给开了支开塞露&#xff0c;然后在医院的公厕里使用的&#xff0c;我妈的描述是:“要不是我手挪走的快点&#xff0c;就直接喷我手了”。。。。。。。。。。。。。。。…

Java 7中对String.substring的更改

众所周知&#xff0c;在您生成相同源字符串的许多子字符串的情况下&#xff0c;Java会优化子字符串操作。 它通过使用(value, offset, count)存储信息的方式来做到这一点。 请参阅以下示例&#xff1a; 在上图中&#xff0c;您会看到字符串“ Hello”和“ World&#xff01;”…

原生js创建模态框

1.效果图如下&#xff1a; 2.代码如下&#xff1a; <!DOCTYPE html><html><head><meta charset"UTF-8"><title>Test</title><style>#pageMask {visibility: hidden; position: absolute;left: 0px; top: 0px;width:…

CSS节选——选择器

CSS&#xff0c;cascading style sheet&#xff0c;层叠样式表&#xff0c;请留意层叠概念。 css3为了区分伪类和伪元素&#xff0c;伪元素采用双冒号写法。 常见伪类——:hover,:link,:active,:target,:not(),:focus。 常见伪元素——::first-letter,::first-line,::before…

vue.js基础知识篇(7):表单校验详解

目录 网盘 第12章:表单校验 1.npm安装vue-validator $ npm install vue-validator 代码示例: var Vuerequire("vue"); var VueValidatorrequire("vue-validator"); Vue.use(VueValidator); 2.直接使用script标签引入vue.js 要下载vue-validator&#xff0c…

SQL数据库中临时表、临时变量和WITH AS关键词创建“临时表”的区别

原文链接&#xff1a;https://www.cnblogs.com/zhaowei303/articles/4204805.html SQL数据库中数据处理时&#xff0c;有时候需要建立临时表&#xff0c;将查询后的结果集放到临时表中&#xff0c;然后在针对这个数据进行操作。 创建“临时表”&#xff08;逻辑上的临时表&…

zbb20170626 myeclipse 2017 ci 构建 spring hibernate struts jar

转载于:https://www.cnblogs.com/super-admin/p/7081209.html

Java线程:保留的内存分析

本文将为您提供一个教程&#xff0c;使您可以确定活动应用程序Java线程保留Java堆空间的数量和位置。 将提供来自Oracle Weblogic 10.0生产环境的真实案例研究&#xff0c;以使您更好地理解分析过程。 我们还将尝试证明过多的垃圾回收或Java堆空间的内存占用问题通常不是由真正…

软件测试白皮书-等价类

设有一个档案管理系统&#xff0c;要求用户输入以年月表示的日期。假设日期限定在1990年1月~2049年12月&#xff0c;并规定日期由6位数字字符组成&#xff0c;前4位表示年&#xff0c;后2位表示月。现用等价类划分法设计测试用例&#xff0c;来测试程序的"日期检查功能&qu…

深入css布局 (1) — 盒模型 元素分类

深入css布局&#xff08;1&#xff09;—— 盒模型 & 元素分类 “ 在css知识体系中&#xff0c;除了css选择器&#xff0c;样式属性等基础知识外&#xff0c;css布局相关的知识才是css比较核心和重要的点。今天我们来深入学习一下css布局相关的知识。” 首先来列下大纲 盒模…

批改网禁止粘贴怎么破_教育部对家长批改作业表态了,明令禁止!你怎么看?...

互联网的发展&#xff0c;的确方便了现代人生活。视频电话、出去买东西你都不用带钱带卡&#xff0c;手机一扫就可以完成支付。很多中小学的家长都会建一个家长群&#xff0c;方便老师和家长的沟通。这个群可以说是家长和学校的桥梁和纽带&#xff0c;家长们为了支持老师的工作…

MapReduce算法–顺序反转

这篇文章是介绍MapReduce算法的系列文章的另一部分&#xff0c;该书在使用MapReduce进行数据密集型文本处理中找到。 先前的文章是Local Aggregation &#xff0c; Local Aggregation PartII和创建共现矩阵 。 这次我们将讨论阶数反转模式。 顺序反转模式利用的MapReduce来计算…

液压支架销轴力学计算分析研究_基于RFID射频精准定位的智能开采研究与应用...

一、项目背景近年来随着智能开采技术的不断发展&#xff0c;装备和新工艺不断更新换代,在智能开采中&#xff0c;对采煤机位置的精准定位是能否实现智能开采的关键&#xff0c;只有准确无误地获取煤机的准确位置&#xff0c;才能实现工作面的智能化开采&#xff0c;进而提高生产…

您是否能及时编译?

还记得上次被C开发人员嘲笑的时候吗&#xff1f; Java如此繁琐&#xff0c;以至于他们甚至都不会考虑使用这种语言&#xff1f; 在许多方面&#xff0c;这一概念仍然成立。 但是对于典型的用法&#xff08;在大型企业的骨干中&#xff09;&#xff0c;Java性能绝对可以与许多竞…