我试着用c来记录进程在linux操作系统上的执行时间,我相信是centos,是学校服务器,我不知道硬件规格。我试图运行的程序在一个目录中查找并运行该目录中遵循job1、job2等模式的所有作业。我正在运行这些文件,这些文件是可执行文件,使用系统调用system()函数,并将每个可执行文件的绝对路径作为参数(即system(jobpath);)。
我还试图通过在系统(jobpath)调用前后调用clock_ghtime()来计算运行刚才调用的作业所需的时间。我有两个timespec变量,我将它们传递给对clock_ghtime()的两个不同调用,称为start和end。我还使用clock_process_cputime_id clock id,该部分的代码如下所示:
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, start);
system(jobpath)//is a path to a job that takes 2-3 seconds in real time to finish
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, end);
唯一的问题是,当我打印出end的tv\nsec变量时,当运行作业显然不需要0纳秒时,我得到一个零值。有人能告诉我为什么这个函数会记录零纳秒,而这显然需要更多的时间,我能做些什么才能得到真正的结果?
最佳答案
system
执行的命令将在另一个进程中运行,因此不会向当前进程添加任何cpu时间。
编辑:
至于第二个问题,您可以使用clock_gettime
和CLOCK_MONOTONIC
来计时system
调用的实际运行时间,但这不会告诉您system
调用的cpu运行时间。我不确定实际经过的时间对你是否足够。