getrusage(2) - Linux 手册页

名称

getrusage - 获取资源使用情况

概要

#include <sys/time.h>
#include <sys/resource.h>

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

描述

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

RUSAGE_SELF
返回调用进程的资源使用统计信息,这是进程中所有线程使用的资源的总和。
RUSAGE_CHILDREN
返回调用进程所有已终止并等待的子进程的资源使用统计信息。如果所有中间子进程都等待其已终止的子进程,则这些统计信息将包括孙子进程以及更远代的后代进程使用的资源。
RUSAGE_THREAD (自 Linux 2.6.26 起)
返回调用线程的资源使用统计信息。
资源使用量以 usage 指向的结构体返回,该结构体具有以下形式
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
这是在用户模式下执行所花费的总时间,以 timeval 结构表示(秒加微秒)。
ru_stime
这是在内核模式下执行所花费的总时间,以 timeval 结构表示(秒加微秒)。
ru_maxrss (自 Linux 2.6.32 起)
这是使用的最大常驻集大小(以千字节为单位)。对于 RUSAGE_CHILDREN,这是最大子进程的常驻集大小,而不是进程树的最大常驻集大小。
ru_ixrss (未维护)
此字段在 Linux 上当前未使用。
ru_idrss (未维护)
此字段在 Linux 上当前未使用。
ru_isrss (未维护)
此字段在 Linux 上当前未使用。
ru_minflt
通过“回收”等待重新分配的页面列表中的页面来服务而无需任何 I/O 活动的页面错误的数量。
ru_majflt
需要 I/O 活动才能服务的页面错误的数量。
ru_nswap (未维护)
此字段在 Linux 上当前未使用。
ru_inblock (自 Linux 2.6.22 起)
文件系统必须执行输入操作的次数。
ru_oublock (自 Linux 2.6.22 起)
文件系统必须执行输出操作的次数。
ru_msgsnd (未维护)
此字段在 Linux 上当前未使用。
ru_msgrcv (未维护)
此字段在 Linux 上当前未使用。
ru_nsignals (未维护)
此字段在 Linux 上当前未使用。
ru_nvcsw (自 Linux 2.6 起)
由于进程在完成其时间片之前主动放弃处理器(通常是为了等待资源的可用性)而导致的上下文切换次数。
ru_nivcsw (自 Linux 2.6 起)
由于更高优先级的进程变为可运行状态或当前进程超过其时间片而导致的上下文切换次数。

返回值

成功时返回零。出错时返回 -1,并相应地设置 errno

错误

EFAULT

usage 指向不可访问的地址空间。

EINVAL

who 无效。

符合

SVr4, 4.3BSD. POSIX.1-2001 规定了 getrusage(),但仅规定了字段 ru_utimeru_stime

RUSAGE_THREAD 是 Linux 特有的。

说明

资源使用指标在 execve(2) 中保留。

虽然现在不需要包含 <sys/time.h>,但可以提高可移植性。(实际上,struct timeval<sys/time.h> 中定义。)

在 Linux 内核版本早于 2.6.9 的情况下,如果 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)

引用自

fork(2), libinn(3), pthreads(7), sge_accounting(5), sge_reporting(5), sge_shepherd(8), sigaction(2), time(7)