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\n", (end - begin) / (double)sc_clk_tck);
 21     printf("user time: %lf\n",
 22             (end_tms.tms_utime - begin_tms.tms_utime) / (double)sc_clk_tck);
 23     printf("sys time: %lf\n",
 24             (end_tms.tms_stime - begin_tms.tms_stime) / (double)sc_clk_tck);
 25     printf("child user time: %lf\n",
 26             (end_tms.tms_cutime - begin_tms.tms_cutime) / (double)sc_clk_tck);
 27     printf("child sys time: %lf\n",
 28             (end_tms.tms_cstime - begin_tms.tms_cstime) / (double)sc_clk_tck);
 29     return 0;
 30 }

测试结果如下所示:

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

时间: 2024-10-02 05:45:08

Linux获取进程执行时间的相关文章

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

1.前言 测试一个程序的执行时间,时间包括用户CPU时间.系统CPU时间.时钟时间.之前获取之前时间都是在程序的main函数用time函数实现,这个只能粗略的计算程序的执行时间,不能准确的获取其他时间.在看<APUE>时,书中有关程序时间测试程序,非常正规,提供这三个时间.如是,上网搜了一下,进行总结一下. 2.获取方法 有两种方法可以获取,第一种是用time命令,time 进程.第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构. 查看tim

Linux 用户进程内存空间详解

常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的. VIRT, Virtual Image (kb) RES, Resident size (kb) SHR, Shared Mem size (kb) %MEM, Memory usage(kb) SWAP, Swapped size (kb) CODE, Code size (kb) DATA, Data+Stack size (kb) nFLT, Page Fault count nDRT, Dir

linux kill进程和子进程小trick

我们的hive web是调用polestar restful service(https://github.com/lalaguozhe/polestar-1)来执行具体的hive或者shark语句的,这几天有用户说hive web上的kill按钮失效了,虽然已经显示停止了查询,但是其实提交到jobtracker的mapred job或者spark worker节点上作业还在running.我看了下,确实有这个问题. polestar对于每一条query执行的命令如下 sudo -u yukan

Android 获取进程内存使用情况方法

ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); activityManager.getMemoryInfo(memoryInfo); Log.i(TAG, " memoryInfo.availMem " + memoryInfo.

脚本-linux获取CPU内存占用信息

问题描述 linux获取CPU内存占用信息 想弄个脚本定时记录,linux 占用最高CPU 内存的进程. 生成友好阅读的日志,或者将查到的信息追加到日志文件中也行. 然后放到crontab里去执行. 但是有个前提,不使用ps命令. 网上找了一堆,可以使用这个方式,但是我不能使用PS命令,请问有什么办法吗: linux下获取占用 CPU 资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linu

使用python 获取进程pid号的方法_python

保存为.py文件后 运行脚本在后面添加进程名称即可 比如:python proinfo.py qq 即可获取QQ的进程信息,注意不区分大小写 复制代码 代码如下: #-*- encoding:UTF-8 -*-import osimport sysimport string import psutilimport re def get_pid(name): process_list = psutil.get_process_list() regex = "pid=(\d+),\sname=\'&

Linux zombie进程详细解析

Linux僵尸进程详细解析 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill-9也不能杀死僵尸进 程.补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进 程.    僵尸进程是指的父进程已经退出

linux内核 进程地址空间

问题描述 linux内核 进程地址空间 大神: 我是一个Linux内核菜鸟,在<<深入linux内核架构>>一书中写道:"各个进程的地址空间都是独立的", ,大神, 我不理解进程的"地址空间"是什么, 是进程的内存吗,请赐教,不胜感激涕零. 解决方案 进程启动后,都有一块自己的私人空间,其它进程 不可以直接访问的 .基本上所有操作系统都是这样的,这是最基本的安全性.这里所说的地址空间 就是一系列的内存地址罢了. 解决方案二: 内容是从<

Linux查看进程命令和具体操作

ps ax 命令显示一个当前系统进程的列表,该列表中包括其他用户拥有的进程.要显示进程以及它们的所有者,使用 ps aux 命令.该列表是一个静态列表:换一句话说,它是在你启用这项命令时正在运行的进程的快照.如果你需要Linux查看进程一个时刻更新的运行进程列表,使用下面描述的 top 命令. Linux查看进程ps 的输出会很长.要防止它快速从屏幕中滑过,你可以把它管道输出给 less 命令: ps aux | less 你可以使用 Linux查看进程ps 命令和 grep 命令的组合来查看某