1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * BSD Process Accounting for Linux - Definitions 3*53ee8cc1Swenshuai.xi * 4*53ee8cc1Swenshuai.xi * Author: Marco van Wieringen (mvw@planets.elm.net) 5*53ee8cc1Swenshuai.xi * 6*53ee8cc1Swenshuai.xi * This header file contains the definitions needed to implement 7*53ee8cc1Swenshuai.xi * BSD-style process accounting. The kernel accounting code and all 8*53ee8cc1Swenshuai.xi * user-level programs that try to do something useful with the 9*53ee8cc1Swenshuai.xi * process accounting log must include this file. 10*53ee8cc1Swenshuai.xi * 11*53ee8cc1Swenshuai.xi * Copyright (C) 1995 - 1997 Marco van Wieringen - ELM Consultancy B.V. 12*53ee8cc1Swenshuai.xi * 13*53ee8cc1Swenshuai.xi */ 14*53ee8cc1Swenshuai.xi 15*53ee8cc1Swenshuai.xi #ifndef _LINUX_ACCT_H 16*53ee8cc1Swenshuai.xi #define _LINUX_ACCT_H 17*53ee8cc1Swenshuai.xi 18*53ee8cc1Swenshuai.xi #include <linux/types.h> 19*53ee8cc1Swenshuai.xi 20*53ee8cc1Swenshuai.xi #include <asm/param.h> 21*53ee8cc1Swenshuai.xi #include <asm/byteorder.h> 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi /* 24*53ee8cc1Swenshuai.xi * comp_t is a 16-bit "floating" point number with a 3-bit base 8 25*53ee8cc1Swenshuai.xi * exponent and a 13-bit fraction. 26*53ee8cc1Swenshuai.xi * comp2_t is 24-bit with 5-bit base 2 exponent and 20 bit fraction 27*53ee8cc1Swenshuai.xi * (leading 1 not stored). 28*53ee8cc1Swenshuai.xi * See linux/kernel/acct.c for the specific encoding systems used. 29*53ee8cc1Swenshuai.xi */ 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi typedef __u16 comp_t; 32*53ee8cc1Swenshuai.xi typedef __u32 comp2_t; 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi /* 35*53ee8cc1Swenshuai.xi * accounting file record 36*53ee8cc1Swenshuai.xi * 37*53ee8cc1Swenshuai.xi * This structure contains all of the information written out to the 38*53ee8cc1Swenshuai.xi * process accounting file whenever a process exits. 39*53ee8cc1Swenshuai.xi */ 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi #define ACCT_COMM 16 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi struct acct 44*53ee8cc1Swenshuai.xi { 45*53ee8cc1Swenshuai.xi char ac_flag; /* Flags */ 46*53ee8cc1Swenshuai.xi char ac_version; /* Always set to ACCT_VERSION */ 47*53ee8cc1Swenshuai.xi /* for binary compatibility back until 2.0 */ 48*53ee8cc1Swenshuai.xi __u16 ac_uid16; /* LSB of Real User ID */ 49*53ee8cc1Swenshuai.xi __u16 ac_gid16; /* LSB of Real Group ID */ 50*53ee8cc1Swenshuai.xi __u16 ac_tty; /* Control Terminal */ 51*53ee8cc1Swenshuai.xi __u32 ac_btime; /* Process Creation Time */ 52*53ee8cc1Swenshuai.xi comp_t ac_utime; /* User Time */ 53*53ee8cc1Swenshuai.xi comp_t ac_stime; /* System Time */ 54*53ee8cc1Swenshuai.xi comp_t ac_etime; /* Elapsed Time */ 55*53ee8cc1Swenshuai.xi comp_t ac_mem; /* Average Memory Usage */ 56*53ee8cc1Swenshuai.xi comp_t ac_io; /* Chars Transferred */ 57*53ee8cc1Swenshuai.xi comp_t ac_rw; /* Blocks Read or Written */ 58*53ee8cc1Swenshuai.xi comp_t ac_minflt; /* Minor Pagefaults */ 59*53ee8cc1Swenshuai.xi comp_t ac_majflt; /* Major Pagefaults */ 60*53ee8cc1Swenshuai.xi comp_t ac_swaps; /* Number of Swaps */ 61*53ee8cc1Swenshuai.xi /* m68k had no padding here. */ 62*53ee8cc1Swenshuai.xi #if !defined(CONFIG_M68K) || !defined(__KERNEL__) 63*53ee8cc1Swenshuai.xi __u16 ac_ahz; /* AHZ */ 64*53ee8cc1Swenshuai.xi #endif 65*53ee8cc1Swenshuai.xi __u32 ac_exitcode; /* Exitcode */ 66*53ee8cc1Swenshuai.xi char ac_comm[ACCT_COMM + 1]; /* Command Name */ 67*53ee8cc1Swenshuai.xi __u8 ac_etime_hi; /* Elapsed Time MSB */ 68*53ee8cc1Swenshuai.xi __u16 ac_etime_lo; /* Elapsed Time LSB */ 69*53ee8cc1Swenshuai.xi __u32 ac_uid; /* Real User ID */ 70*53ee8cc1Swenshuai.xi __u32 ac_gid; /* Real Group ID */ 71*53ee8cc1Swenshuai.xi }; 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi struct acct_v3 74*53ee8cc1Swenshuai.xi { 75*53ee8cc1Swenshuai.xi char ac_flag; /* Flags */ 76*53ee8cc1Swenshuai.xi char ac_version; /* Always set to ACCT_VERSION */ 77*53ee8cc1Swenshuai.xi __u16 ac_tty; /* Control Terminal */ 78*53ee8cc1Swenshuai.xi __u32 ac_exitcode; /* Exitcode */ 79*53ee8cc1Swenshuai.xi __u32 ac_uid; /* Real User ID */ 80*53ee8cc1Swenshuai.xi __u32 ac_gid; /* Real Group ID */ 81*53ee8cc1Swenshuai.xi __u32 ac_pid; /* Process ID */ 82*53ee8cc1Swenshuai.xi __u32 ac_ppid; /* Parent Process ID */ 83*53ee8cc1Swenshuai.xi __u32 ac_btime; /* Process Creation Time */ 84*53ee8cc1Swenshuai.xi float ac_etime; /* Elapsed Time */ 85*53ee8cc1Swenshuai.xi comp_t ac_utime; /* User Time */ 86*53ee8cc1Swenshuai.xi comp_t ac_stime; /* System Time */ 87*53ee8cc1Swenshuai.xi comp_t ac_mem; /* Average Memory Usage */ 88*53ee8cc1Swenshuai.xi comp_t ac_io; /* Chars Transferred */ 89*53ee8cc1Swenshuai.xi comp_t ac_rw; /* Blocks Read or Written */ 90*53ee8cc1Swenshuai.xi comp_t ac_minflt; /* Minor Pagefaults */ 91*53ee8cc1Swenshuai.xi comp_t ac_majflt; /* Major Pagefaults */ 92*53ee8cc1Swenshuai.xi comp_t ac_swaps; /* Number of Swaps */ 93*53ee8cc1Swenshuai.xi char ac_comm[ACCT_COMM]; /* Command Name */ 94*53ee8cc1Swenshuai.xi }; 95*53ee8cc1Swenshuai.xi 96*53ee8cc1Swenshuai.xi /* 97*53ee8cc1Swenshuai.xi * accounting flags 98*53ee8cc1Swenshuai.xi */ 99*53ee8cc1Swenshuai.xi /* bit set when the process ... */ 100*53ee8cc1Swenshuai.xi #define AFORK 0x01 /* ... executed fork, but did not exec */ 101*53ee8cc1Swenshuai.xi #define ASU 0x02 /* ... used super-user privileges */ 102*53ee8cc1Swenshuai.xi #define ACOMPAT 0x04 /* ... used compatibility mode (VAX only not used) */ 103*53ee8cc1Swenshuai.xi #define ACORE 0x08 /* ... dumped core */ 104*53ee8cc1Swenshuai.xi #define AXSIG 0x10 /* ... was killed by a signal */ 105*53ee8cc1Swenshuai.xi 106*53ee8cc1Swenshuai.xi #ifdef __BIG_ENDIAN 107*53ee8cc1Swenshuai.xi #define ACCT_BYTEORDER 0x80 /* accounting file is big endian */ 108*53ee8cc1Swenshuai.xi #else 109*53ee8cc1Swenshuai.xi #define ACCT_BYTEORDER 0x00 /* accounting file is little endian */ 110*53ee8cc1Swenshuai.xi #endif 111*53ee8cc1Swenshuai.xi 112*53ee8cc1Swenshuai.xi #define ACCT_VERSION 2 113*53ee8cc1Swenshuai.xi #define AHZ (HZ) 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi 116*53ee8cc1Swenshuai.xi #endif /* _LINUX_ACCT_H */ 117