GETRUSAGE(2) | Linux Programmer's Manual | GETRUSAGE(2) |
getrusage - 資源の使用量を取得する
#include <sys/time.h>
#include <sys/resource.h>
int getrusage(int who, struct rusage *usage);
getrusage() は who の資源 (resource) の使用量を返す。 who には以下のいずれか一つを指定できる。
資源使用量は usage が指す構造体に格納されて返される。 構造体は以下の形式である。
struct rusage {
struct timeval ru_utime; /* 使用されたユーザー CPU 時間 */
struct timeval ru_stime; /* 使用されたシステム CPU 時間 */
long ru_maxrss; /* RAM 上に存在する仮想ページのサイズ
(resident set size) の最大値 */
long ru_ixrss; /* 共有メモリーの合計サイズ */
long ru_idrss; /* 非共有データの合計サイズ */
long ru_isrss; /* 非共有スタックの合計サイズ */
long ru_minflt; /* ページの再利用 (ソフトページフォルト) */
long ru_majflt; /* ページフォールト (ハードページフォルト) */
long ru_nswap; /* スワップ */
long ru_inblock; /* ブロック入力操作 */
long ru_oublock; /* ブロック出力操作 */
long ru_msgsnd; /* 送信された IPC メッセージ */
long ru_msgrcv; /* 受信された IPC メッセージ */
long ru_nsignals; /* 受信されたシグナル */
long ru_nvcsw; /* 意図したコンテキスト切り替え */
long ru_nivcsw; /* 意図しないコンテキスト切り替え */ };
すべてのフィールドがサポートされているわけではない。 メンテナンスされていないフィールドには、 カーネルが 0 を設定する (メンテナンスされていないフィールドは、 他のシステムとの互換性のために提供されており、 いつか Linux でもサポートされるかもしれない)。 各フィールドの詳細は以下の通りである。
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。
この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース | 属性 | 値 |
getrusage() | Thread safety | MT-Safe |
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. POSIX.1 は getrusage() を規定しているが、規定しているフィールドは ru_utime と ru_stime だけである。
RUSAGE_THREAD は Linux 固有である。
execve(2) の前後でリソース使用量の指標は保持される。
今日では <sys/time.h> をインクルードする必要はないが、 インクルードしておけば移植性が増す。 (実際 struct timeval は <sys/time.h> で定義されている。)
2.6.9 より前のバージョンの Linux カーネルでは、 SIGCHLD の処理が SIG_IGN に設定されていると、 子プロセスのリソース使用量が RUSAGE_CHILDREN で返される値に自動的に含められる。 しかし POSIX.1-2001 では、これを明確に禁止している。 この準拠していなかった点は、Linux 2.6.9 以降で改正された。
このページの最初で示した構造体の定義は 4.3BSD Reno のものである。
古いシステムでは、 getrusage() と同様の目的を持つ関数 vtimes() が提供されていた。後方互換性のため、glibc (バージョン 2.32 まで) でも vtimes() を提供している。全ての新しいアプリケーションでは getrusage() を使用すべきである。
proc(5) にある /proc/[pid]/stat の説明も参照のこと。
clock_gettime(2), getrlimit(2), times(2), wait(2), wait4(2), clock(3)
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。
2020-12-21 | Linux |