acct
1. acct.2.man
Manpage of ACCT
ACCT
Section: Руководство программиста Linux (2)Updated: 2008-06-16
Index Return to Main Contents
ИМЯ
acct - включает или выключает учёт процессовОБЗОР
#include <unistd.h> int acct(const char *filename);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
acct(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
ОПИСАНИЕ
Системный вызов acct() включает или выключает учёт процессов. Если при вызове, в качестве аргумента, указывается имя существующего файла, происходит включение учёта, ипри завершении процесса, в файл filename добавляются записи для каждого завершившегося процесса. Если в качестве аргумента указан NULL, то учёт выключается.ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.ОШИБКИ
- EACCES
- Нет прав на запись в указанный файл, или в одном из каталогов в pathname не разрешён поиск (см. также path_resolution(7)), или filename не является обычным файлом.
- EFAULT
- Аргумент filename указывает за пределы доступного адресного пространства.
- EIO
- Ошибка записи в файл filename.
- EISDIR
- filename является каталогом.
- ELOOP
- Во время определения pathname встретилось слишком много символьных ссылок.
- ENAMETOOLONG
- Слишком длинное значение аргумента pathname.
- ENFILE
- Достигнуто максимальное количество открытых файлов в системе.
- ENOENT
- Указанный файл не существует.
- ENOMEM
- Не хватает памяти.
- ENOSYS
- BSD учёт процессов не может быть разрешён, если эта возможность не была включена при компиляции ядра операционной системы. Этой возможностью управляет параметр настройки ядра CONFIG_BSD_PROCESS_ACCT.
- ENOTDIR
- Компонент пути в pathname в действительности не является каталогом.
- EPERM
- Вызвавшему процессу не хватает прав включить учёт процессов. В Linux для этого требуется мандат CAP_SYS_PACCT.
- EROFS
- Аргумент filename ссылается на файл, который находится на файловой системе, смонтированной только для чтения.
- EUSERS
- Закончились свободные файловые структуры или память.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.3BSD (но не POSIX).ЗАМЕЧАНИЯ
Учёт не производится для программ, которые заканчиваются аварийно. В частности, незавершаемые процессы никогда не учитываются.Структура записей, записываемых в файл учёта, описана в acct(5).
СМОТРИТЕ ТАКЖЕ
acct(5)
Index
This document was created by man2html using the manual pages.
Time: 17:41:29 GMT, May 11, 2012
2. acct.5.man
Manpage of ACCT
ACCT
Section: Руководство программиста Linux (5)Updated: 2008-06-15
Index Return to Main Contents
ИМЯ
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; /* флаги учёта */
u_int16_t ac_uid; /* ID пользователя */
u_int16_t ac_gid; /* ID группы */
u_int16_t ac_tty; /* управляющий терминал */
u_int32_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; /* прочитано или записано блоков (не используется) */
comp_t ac_minflt; /* промахи для вспомогательных страниц */
comp_t ac_majflt; /* промахи для главных страниц */
comp_t ac_swaps; /* количество подкачек (не используется) */
u_int32_t ac_exitcode; /* код завершения процесса
(см. wait(2)) */
char ac_comm[ACCT_COMM+1];
/* имя команды (basename от последней
исполнявшейся команды; завершается null) */
char ac_pad[X]; /* байты заполнения */
};
enum { /* биты для поля ac_flag */
AFORK = 0x01, /* был выполнен fork, но не exec */
ASU = 0x02, /* использовались права суперпользователя */
ACORE = 0x08, /* создан файл core */
AXSIG = 0x10 /* завершён по сигналу */
};
Тип данных comp_t --- это число с плавающей точкой, состоящее из 3-битной экспоненты по основанию 8 и 13-битной мантиссы. Переменная c этого типа может быть преобразована к целому (long) так:
v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3);
Поля ac_utime, ac_stime и ac_etime хранят время в "тактах часов"; для преобразования в секунды нужно поделить значение на sysconf(_SC_CLK_TCK).
Формат файла учёта версии 3
Начиная с ядра версии 2.6.8, можно создавать файл учёта альтернативной версии, если задать параметр CONFIG_BSD_PROCESS_ACCT_V3 при сборке ядра. Если этот параметр установлен, то записи, сохранённые в файле учёта, будут содержать дополнительные поля, а ширина полей c_uid и ac_gid будет расширена с 16 до 32 бит (для соответствия с увеличенным размером UID и GID в Linux 2.4 и новее). Записи определены следующим образом:
struct acct_v3 {
char ac_flag; /* флаги */
char ac_version; /* всегда равно ACCT_VERSION (3) */
u_int16_t ac_tty; /* управляющий терминал */
u_int32_t ac_exitcode; /* код завершения процесса
u_int32_t ac_uid; /* реальный ID пользователя */
u_int32_t ac_gid; /* реальный ID группы */
u_int32_t ac_pid; /* ID процесса */
u_int32_t ac_ppid; /* ID родительского процесса */
u_int32_t ac_btime; /* время создания процесса
float ac_etime; /* прошедшее время */
comp_t ac_utime; /* время работы ЦП в пользовательском режиме */
comp_t ac_stime; /* время работы ЦП в системном режиме */
comp_t ac_mem; /* среднее количество использованной памяти (КБ) */
comp_t ac_io; /* передано символов (не используется) */
comp_t ac_rw; /* прочитано или записано блоков
(не используется) */
comp_t ac_minflt; /* промахи для вспомогательных страниц */
comp_t ac_majflt; /* промахи для главных страниц */
comp_t ac_swaps; /* количество подкачек (не используется) */
char ac_comm[ACCT_COMM]; /* имя команды */
};
ВЕРСИИ
Структура acct_v3 определена в glibc начиная с версии 2.6.СООТВЕТСТВИЕ СТАНДАРТАМ
Учёт процессов возник в BSD. Хотя он есть в большинстве систем, он не стандартизован, и параметры разнятся между системами.ЗАМЕЧАНИЯ
Записи в файле учёта упорядочены по времени завершения процессов.В ядрах до версии 2.6.9 включительно, с помощью библиотеки нитей NPTL для каждой нити сохранялась своя запись учёта; начиная с Linux 2.6.10 отдельная запись сохраняется для всего процесса при завершении работы его последней нити.
В файле proc/sys/kernel/acct, описанном в proc(5), определены настройки, которые управляют поведением учёта процессов при нехватке места на диске.
СМОТРИТЕ ТАКЖЕ
lastcomm(1), acct(2), accton(8), sa(8)
Index
This document was created by man2html using the manual pages.
Time: 17:41:29 GMT, May 11, 2012



