Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all bug

名前

       acct - プロセスアカウンティングファイル

書式

       #include <sys/acct.h>

説明

       カーネルがプロセスアカウンティングのオプション (CONFIG_BSD_PROCESS_ACCT)  を有効にして作成
       されていると、以下のように acct(2)  を呼び出すとプロセスアカウンティングが開始される。

           acct("/var/log/pacct");

       プロセスアカウンティングが有効になっていると、カーネルは  システム上の各プロセスが終了する
       たびにアカウンティングファイルに レコードを書き込む。 このレコードは、終了したプロセスに関
       する情報を保持するもので、 <sys/acct.h> で以下のように定義されている。

           #define ACCT_COMM 16

           typedef u_int16_t comp_t;

           struct acct {
               char ac_flag;           /* Accounting flags */
               u_int16_t ac_uid;       /* Accounting user ID */
               u_int16_t ac_gid;       /* Accounting group ID */
               u_int16_t ac_tty;       /* Controlling terminal */
               u_int32_t ac_btime;     /* Process creation time
                                          (seconds since the Epoch) */
               comp_t    ac_utime;     /* User CPU time */
               comp_t    ac_stime;     /* System CPU time */
               comp_t    ac_etime;     /* Elapsed time */
               comp_t    ac_mem;       /* Average memory usage (kB) */
               comp_t    ac_io;        /* Characters transferred (unused) */
               comp_t    ac_rw;        /* Blocks read or written (unused) */
               comp_t    ac_minflt;    /* Minor page faults */
               comp_t    ac_majflt;    /* Major page faults */
               comp_t    ac_swaps;     /* Number of swaps (unused) */
               u_int32_t ac_exitcode;  /* Process termination status
                                          (see wait(2)) */
               char      ac_comm[ACCT_COMM+1];
                                       /* Command name (basename of last
                                          executed command; null-terminated) */
               char      ac_pad[X];    /* padding bytes */
           };

           enum {          /* Bits that may be set in ac_flag field */
               AFORK = 0x01,           /* Has executed fork, but no exec */
               ASU   = 0x02,           /* Used superuser privileges */
               ACORE = 0x08,           /* Dumped core */
               AXSIG = 0x10            /* Killed by a signal */
           };

       データ型 comp_t は浮動小数点値で、3 ビット幅の基数が 8 の指数部と 13  ビット幅の仮数部から
       構成される。 comp_t 型の値 c は以下のようにして (long 型の) 整数に変換できる。

           v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3);

       フィールド ac_utime, ac_stime, ac_etime は "clock ticks" 単位で計測した時間である。 これら
       の値を sysconf(_SC_CLK_TCK) で割ると、秒に変換できる。

   バージョン 3 のアカウンティングファイルのフォーマット
       カーネル 2.6.8  以降では、  別のバージョンのアカウンティングファイルを生成することができ、
       これを使うにはカーネル構築時に CONFIG_BSD_PROCESS_ACCT_V3 オプションが有効になっている必要
       がある。  このオプションが設定されると、アカウンティングファイルに書き込まれる  レコードに
       フィールドが追加される。 また、フィールド c_uidac_gid の幅が 16 ビットから 32 ビットに
       拡張される (これは Linux 2.4 以降で UID と GID  のサイズが増えているのに  対応したものであ
       る)。 このレコードは以下のように定義されている。

           struct acct_v3 {
               char      ac_flag;      /* Flags */
               char      ac_version;   /* Always set to ACCT_VERSION (3) */
               u_int16_t ac_tty;       /* Controlling terminal */
               u_int32_t ac_exitcode;  /* Process termination status */
               u_int32_t ac_uid;       /* Real user ID */
               u_int32_t ac_gid;       /* Real group ID */
               u_int32_t ac_pid;       /* Process ID */
               u_int32_t ac_ppid;      /* Parent process ID */
               u_int32_t ac_btime;     /* Process creation time */
               float     ac_etime;     /* Elapsed time */
               comp_t    ac_utime;     /* User CPU time */
               comp_t    ac_stime;     /* System time */
               comp_t    ac_mem;       /* Average memory usage (kB) */
               comp_t    ac_io;        /* Characters transferred (unused) */
               comp_t    ac_rw;        /* Blocks read or written
                                          (unused) */
               comp_t    ac_minflt;    /* Minor page faults */
               comp_t    ac_majflt;    /* Major page faults */
               comp_t    ac_swaps;     /* Number of swaps (unused) */
               char      ac_comm[ACCT_COMM]; /* Command name */
           };

バージョン

       acct_v3 構造体はバージョン 2.6 以降の glibc で定義されている。

準拠

       プロセスアカウンティングは BSD 由来である。 この機能はほとんどのシステムに存在するが、標準
       化されておらず、 その詳細はシステムによりいくらか異なる。

注意

       アカウンティングファイルのレコードは、プロセスの終了時刻の順序となる。

       バージョン 2.6.9 以前のカーネルでは、 NPTL  スレッドライブラリを使って作成されたスレッドで
       は   スレッド毎に別々のアカウンティングレコードが書き込まれていた。  Linux  2.6.10  以降で
       は、プロセス内の最後のスレッドが終了すると、  プロセス全体についてのアカウンティングレコー
       ドが一つだけ書き込まれる。

       /proc/sys/kernel/acct  ファイル (proc(5)  で説明されている) は、ディスク容量の残りが少なく
       なった際の プロセスアカウンティングの動作を制御する設定を保持している。

関連項目

       lastcomm(1), acct(2), accton(8), sa(8)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。