GETRUSAGE - Linux手册页

时间:2019-08-20 17:58:51  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

getrusage-获取资源使用情况

语法

#包括
#包括

int getrusage(int who,struct rusage * usage);

说明

getrusage()返回谁的资源使用量度,可以是以下之一:

RUSAGE_SELF
返回调用进程的资源使用情况统计信息,该统计信息是该进程中所有线程使用的资源总和。
RUSAGE_CHILDREN
返回已终止并正在等待的调用过程的所有子进程的资源使用情况统计信息。如果所有介入的后代都在等待其终止的子代,则这些统计信息将包括孙子代和进一步移除的后代所使用的资源。
RUSAGE_THREAD(since Linux 2.6.26)
返回调用线程的资源使用情况统计信息。为了从中获取此常量的定义,必须定义_GNU_SOURCE功能测试宏(在包含任何头文件之前)。

资源使用情况以使用情况所指向的结构形式返回,格式如下:

struct rusage {
    struct timeval ru_utime; /* user CPU time used */
    struct timeval ru_stime; /* system CPU time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims (soft page faults) */
    long   ru_majflt;        /* page faults (hard page faults) */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block input operations */
    long   ru_oublock;       /* block output operations */
    long   ru_msgsnd;        /* IPC messages sent */
    long   ru_msgrcv;        /* IPC messages received */
    long   ru_nsignals;      /* signals received */
    long   ru_nvcsw;         /* voluntary context switches */
    long   ru_nivcsw;        /* involuntary context switches */
};

并非所有字段都填写完整;内核将未维护的字段设置为零。 (提供未维护的字段是为了与其他系统兼容,因为有一天它们可能在Linux上受支持。)这些字段的解释如下:

ru_utime
这是在用户模式下执行所花费的总时间,以时间结构表示(秒加微秒)。
ru_stime
这是在内核模式下执行所花费的总时间,以timeval结构(秒加微秒)表示。
ru_maxrss(since Linux 2.6.32)
这是使用的最大居民集大小(以千字节为单位)。对于RUSAGE_CHILDREN,这是最大子项的驻留集大小,而不是进程树的最大驻留集大小。
ru_ixrss(unmaintained)
当前在Linux上未使用此字段。
ru_idrss(unmaintained)
当前在Linux上未使用此字段。
ru_isrss(unmaintained)
当前在Linux上未使用此字段。
ru_minflt
没有任何I / O活动而服务的页面错误的数量;在这里,通过从等待重新分配的页面列表中``回收''页面框架来避免I / O活动。
ru_majflt
需要I / O活动的服务的页面错误数。
ru_nswap(unmaintained)
当前在Linux上未使用此字段。
ru_inblock(since Linux 2.6.22)
文件系统必须执行输入的次数。
ru_oublock(since Linux 2.6.22)
文件系统必须执行输出的次数。
ru_msgsnd(unmaintained)
当前在Linux上未使用此字段。
ru_msgrcv(unmaintained)
当前在Linux上未使用此字段。
ru_nsignals(unmaintained)
当前在Linux上未使用此字段。
ru_nvcsw(since Linux 2.6)
由于进程在完成其时间片之前自愿放弃处理器(通常是等待资源的可用性)而导致上下文切换的次数。
ru_nivcsw(since Linux 2.6)
由于较高优先级的流程变得可运行或由于当前流程超出其时间范围,因此导致上下文切换的次数。

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

错误说明

EFAULT
使用点位于可访问地址空间之外。
EINVAL
谁无效。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
getrusage()Thread safetyMT-Safe

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4、4.3BSD。 POSIX.1指定getrusage(),但仅指定字段ru_utime和ru_stime。

RUSAGE_THREAD是特定于Linux的。

备注

资源使用量度在execve(2)中保留。

这些天都不需要添加,但是增加了可移植性。 (实际上,struct timeval在中定义。)

在2.6.9之前的Linux内核版本中,如果SIGCHLD的处置设置为SIG_IGN,则子进程的资源使用会自动包含在RUSAGE_CHILDREN返回的值中,尽管POSIX.1-2001明确禁止这样做。 Linux 2.6.9和更高版本中纠正了此不符合项。

本页面开头显示的结构定义来自4.3BSD Reno。

古代系统提供了vtimes()函数,其功能与getrusage()类似。为了向后兼容,glibc还提供了vtimes()。所有新应用程序都应使用getrusage()编写。

另请参见proc(5)中对/ proc / [pid] / stat的描述。

另外参见

clock_gettime(2),getrlimit(2),times(2),wait(2),wait4(2),clock(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/