服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|

服务器之家 - 服务器系统 - Linux - linux获取进程执行时间方法示例

linux获取进程执行时间方法示例

2021-10-06 15:59Linux教程网 Linux

linux获取进程执行时间有两种方法可以获取,第一种是用time命令,time 进程。第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构,详细看下面的示例代码

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、测试例子:

测试程序如下:

 

复制代码 代码如下:


#include <stdio.h>
#include <stdlib.h>
#include <sys/times.h>
#include <unistd.h>

 

#define BUFFER_SIZE  4 * 1024

int main()
{
    int sc_clk_tck;
    sc_clk_tck = sysconf(_SC_CLK_TCK);

    struct tms begin_tms, end_tms;
    clock_t begin, 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);
    return 0;
}

 

 

测试结果如下所示:

linux获取进程执行时间方法示例

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

linux获取进程执行时间方法示例

延伸 · 阅读

精彩推荐
  • Linux为网站根目录添加sgid权限

    为网站根目录添加sgid权限

    网站根目录不正确的权限除了会带来安全性,还可以导致类似执行请求动作,连接信息必需提供这样的ftp问题,该如何正确设置网站根目录的权限呢? ...

    Linux教程网2872020-03-31
  • Linux基于Linux网关服务器squid配置过程详解

    基于Linux网关服务器squid配置过程详解

    本篇文章小编将为大家介绍,基于Linux网关服务器squid配置过程详解,需要的朋友可以参考一下...

    Linux教程网11012021-09-28
  • Linuxlinux系统安全shell脚本第二版

    linux系统安全shell脚本第二版

    本脚本是第二次更新,已经大量应用在某大型媒体网站体系中,加入了之前没有想到的一些安全设置 ...

    崔晓辉的博客3462019-12-10
  • LinuxLinux系统中用户管理的基本命令整理

    Linux系统中用户管理的基本命令整理

    这篇文章主要介绍了Linux系统中用户管理的基本命令整理,是Linux入门学习中的基础知识,需要的朋友可以参考下...

    微度网络3372019-07-15
  • LinuxLinux 3.0 文件系统EXT4 与 Btrfs测试比较

    Linux 3.0 文件系统EXT4 与 Btrfs测试比较

    EXT4文件系统大家可能都比较熟悉了,现在流行的ubuntu 11.04和Fedora15都是默认采用的EXT4,EXT4是Linux的第四代扩展文件系统,是EXT3的后继版本。 ...

    Linux教程网4042020-03-11
  • LinuxLinux安装MongoDB启动及常见问题解决

    Linux安装MongoDB启动及常见问题解决

    这篇文章主要介绍了Linux安装MongoDB启动及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    shookm9582020-08-28
  • Linuxlinux系统用什么命令查看端口的占用情况?

    linux系统用什么命令查看端口的占用情况?

    linux系统用什么命令查看端口的占用情况?在LINUX系统环境下,我们可以使用系统命令来查看端口的使用情况。下面我们一起来看看 ...

    脚本之家17532019-10-16
  • Linuxlinux btrfs文件系统及管理

    linux btrfs文件系统及管理

    Btrfs(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),linux文件系统,具有写时复制COW(copy-on-write),改善ext3文件系统单文件大小限制,并加入其他特性...

    linux之家7872019-06-16