在Linux中,我们可以使用两种方法来查找所使用的资源,例如时间,页面错误,页面交换,上下文切换。一种方法是使用getrusage()函数,另一种方法是使用命令/ usr / bin / time -v [检查使用情况的命令]。这些查找资源使用情况的方式之间有什么区别?
当您使用诸如time(1)之类的命令时,它必须通过其系统库包装器使用诸如getrusage(2)之类的系统调用。这正在建立一个具有正确系统调用号和结构的请求,以表明它希望获得进程子进程的使用情况信息。
为了在UNIX / POSIX操作系统之间实现兼容性,从选项层次结构中选择了用于构建命令的特定功能,以充分覆盖运行命令的OS。(某些操作系统可能无法实现所有功能,也可能有各种怪癖。)
在某些情况下,它宁愿将等待孩子的分组,并将其用法组合成调用wait3,而wait3又被实现为更复杂的wait4的包装,后者具有自己的系统调用号。
wait3 / 4和getrusage都用信息填充相同的rusage结构,并且由于时间仅直接调用一个子进程,因此进行调用wait3()
或将其分解为功能较弱的调用wait();getrusage(RUSAGE_CHILDREN)
,本质上是相同的。因此,时间有效地显示了与getrusage提供的数据相同的数据(连同它从系统中汇编的一些更通用的数据,例如使用调用经过的实时时间gettimeofday
)。
systemcall包装器函数之间的真正区别是:
wait();getrusage()
功能不像任何一种都通用,但是对于实现的time(1)命令来说已经足够了。(因此,wait3是在可用的操作系统上使用时间最简单,最安全的选择。)为了验证它们是否相同,可以将其更改time
为备用版本,重新编译并进行比较:
while ((caught = wait3 (&status, 0, NULL)) != pid)
{
if (caught == -1) {
getrusage(RUSAGE_CHILDREN, &resp->ru);
return 0;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句