zoukankan      html  css  js  c++  java
  • Linux获取进程执行时间

    1、前言

          测试一个程序的执行时间,时间包括用户CPU时间、系统CPU时间、时钟时间。之前获取之前时间都是在程序的main函数用time函数实现,这个只能粗略的计算程序的执行时间,不能准确的获取其他时间。在看《APUE》时,书中有关程序时间测试程序,非常正规,提供这三个时间。如是,上网搜了一下,进行总结一下。

    2、获取方法

      有两种方法可以获取,第一种是用time命令,time 进程。第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构。

    查看times函数,man 2 tms,得到tms结构定义和times函数声明如下:

    struct tms {
           clock_t tms_utime;  /* user time */
           clock_t tms_stime;  /* system time */
           clock_t tms_cutime; /* user time of children */
           clock_t tms_cstime; /* system time of children */
      };
     #include <sys/times.h>
    
     clock_t times(struct tms *buf);

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

    3、测试例子:

    测试程序如下:

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <sys/times.h>
      4 #include <unistd.h>
      5 
      6 #define BUFFER_SIZE  4 * 1024 
      7 
      8 int main()
      9 {
     10     int sc_clk_tck;
     11     sc_clk_tck = sysconf(_SC_CLK_TCK);
     12 
     13     struct tms begin_tms, end_tms;
     14     clock_t begin, end;
     15     system("date");
     16     begin = times(&begin_tms);
     17     sleep(2);
     18     end = times(&end_tms);
     19 
     20     printf("real time: %lf
    ", (end - begin) / (double)sc_clk_tck);
     21     printf("user time: %lf
    ",
     22             (end_tms.tms_utime - begin_tms.tms_utime) / (double)sc_clk_tck);
     23     printf("sys time: %lf
    ",
     24             (end_tms.tms_stime - begin_tms.tms_stime) / (double)sc_clk_tck);
     25     printf("child user time: %lf
    ",
     26             (end_tms.tms_cutime - begin_tms.tms_cutime) / (double)sc_clk_tck);
     27     printf("child sys time: %lf
    ",
     28             (end_tms.tms_cstime - begin_tms.tms_cstime) / (double)sc_clk_tck);
     29     return 0;
     30 }

    测试结果如下所示:

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

    4、参考网址

    http://www.01happy.com/linux-process-time/

    http://www.01happy.com/c-get-process-time/

  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/Anker/p/3416288.html
Copyright © 2011-2022 走看看