НАЗВАНИЕ
acct - формат файла с информацией о процессах
СИНТАКСИС
#include <sys/acct.h>
ОПИСАНИЕ
Файлы, которые образуются системным вызовом acct(2),
содержат записи следующей структуры, определенной во
включаемом файле <sys/acct.h>:
typedef ushort comp_t; /* "Вещественное число": 13 бит мантисса, 3 бита порядок */ struct acct { char ac_flag; /* Флаг учетной информации */ char ac_stat; /* Код завершения */ ushort ac_uid; ushort ac_gid; dev_t ac_tty; time_t ac_btime; /* Время начала */ comp_t ac_utime; /* Пользовательское время ЦП в тактах часов */ comp_t ac_stime; /* Системное время ЦП в тактах часов */ comp_t ac_etime; /* Астрономическое время выполне- ния в тактах часов */ comp_t ac_mem; /* Расход памяти в Кб */ comp_t ac_io; /* Кол-во переданных символов */ comp_t ac_rw; /* Общее число прочитанных и за- писанных блоков */ char ac_comm[8]; /* Имя команды */ }; extern struct acct acctbuf; extern struct inode *acctp; /* Описатель файла учетной информации */ #define AFORK 01 /* Выполнен fork, но не exec */ #define ASU 02 /* Привилегии суперпользователя */ #define ACCTF 0300 /* Тип записи: 00 = acct */
В поле ac_flag флаг AFORK устанавливается при каждом вызове fork(2) и сбрасывается при вызове exec(2). Поле ac_comm наследуется от родительского процесса и сбрасывается при exec(2). Каждый раз, когда система выделяет процессу квант времени, она также добавляет к ac_mem текущий размер процесса, вычисляемый как
(размер сегмента данных) + (размер сегмента команд) / (количество процессов в памяти, использующих этот сегмент команд)
Значение ac_mem/(ac_stime+ac_utime) может служить хорошим приближением среднего размера процесса, с учетом разделения сегмента команд.
Следующая структура используется различными командами работы с учетной информацией:
/* Общая учетная информация за некоторый период */ struct tacct { uid_t ta_uid; /* Идент. пользователя */ char ta_name[8]; /* Входное имя */ float ta_cpu[2]; /* Среднее время ЦП в минутах */ float ta_kcore[2]; /* Среднее значение килобайтоминут */ float ta_con[2]; /* Среднее астрономичес- кое время выполнения в минутах */ float ta_du; /* Суммарное использова- ние диска */ long ta_pc; /* Число процессов */ unsigned short ta_sc; /* Число сеансов раб. */ unsigned short ta_dc; /* Число дисковых прими- тивов */ unsigned short ta_fee; /* Для спец. применений */ };
СМ. ТАКЖЕ
acct(2), exec(2), fork(2).
acctcom(1) в Справочнике пользователя.
СЮРПРИЗЫ
Значение поля ac_mem для быстро заканчивающихся команд
дает мало информации о реальном размере команды.