• объем памяти, используемый процессом;
• количество дескрипторов открытых файлов.
Операционная система устанавливает жесткие ограничения на использование ресурсов процессом. Процесс может установить или изменить мягкие ограничения ресурсов, но это значение не должно превысить жесткий предел, установленный операционной системой. Процесс может понизить свой жесткий предел, но его значение не должно быть меньше мягкого предела. Операция по понижению процессом своего жесткого предела необратима. Его могут повысить только процессы, обладающие специальными привилегиями.
Синопсис
#include
int setrlimit(int resource, const struct rlimit *rlp);
int getrlimit(int resource, struct rlimit *rlp);
int getrusage(int who, struct rusage *r_usage);
Функция setrlimit() используется для установки ограничений на потребление заданных ресурсов. Эта функция позволяет установить как жесткий, так и мягкий пределы. Параметр resource представляет тип ресурса. Значения типов ресурсов (и их краткое описание) приведено в табл. 3.6. Жесткие и мягкие пределы заданного ресурса представляются параметром rlp, который указывает на структуру rlimit, содержащую два объекта типа rlim_t.
struct rlimit {
rlim_t rlim_cur;
rlim_t rlim_max;
} ;
Тип rlim_t — это целочисленный тип без знака. Член rlim_cur содержит значение текущего, или мягкого предела, а член rlim_max — значение максимума, или жесткого предела. Членам rlim_cur и rlim_max можно присвоить любые значения, а также символические константы, определенные в заголовке .
RLIM_INFINITYОтсутствие ограничения.
RLIM_SAVED_MAXНепредставимый хранимый жесткий предел.
RLIM_SAVED_CURНепредставимый хранимый мягкий предел.
Как жесткий, так и мягкий пределы можно установить равными значению RLIM_INFINITY,которое подразумевает, что ресурс неограничен.
Таблица З.6. Значения параметра resource
RLIMIT_COREМаксимальный размер файла ядра в байтах, который может быть создан процессом
RLIMIT_CPUМаксимальный объем времени ЦП в секундах, которое может быть использовано процессом RLIMIT_DATAМаксимальный размер раздела данных процесса в байтах
RLIMIT_FSIZEМаксимальный размер файла в байтах, который может быть создан процессом
RLlMlT_NOFILEУвеличенное на единицу максимальное значение, которое система может назначить вновь созданному дескриптору файла
RLlMlT_STACKМаксимальный размер стека процесса в байтах
RLlMlT_AS Максимальный размер доступной памяти процесса в байтах
Функция getrlimit() возвращает значения мягкого и жесткого пределов заданного ресурса в объекте rlp.Обе функции возвращают значение 0 при успешном завершении и число -1 в противном случае. Пример установки процессом мягкого предела для размера файлов в байтах приведен в листинге 3.4.
Листинг 3.4. Использование функции setrlimit() для установки мягкого предела для размера файлов
#include
struct rlimit R_limit;
struct rlimit R_limit_values;
R_limit.rlim_cur = 2 000;
R_limit.rlim_max = RLIM_SAVED_MAX;
setrlimit (RLIMIT_FSIZE, &R__1 imit);
getrlimit(RLIMIT_FSIZE, &R_limit_values);
cout << «мягкий предел для размера файлов: " << R_limit_values.rlim_cur <
В листинге 3.4 мягкий предел для размера файлов устанавливается равным 2000 байт, а жесткий предел — максимально возможному значению. Функции setrlimit ()передаются значения RLIMIT_FSIZEи R_limit,а функции getrlimit() — значения RLIMIT_FSIZEи R_limit_values.После их выполнения на экран выводится установленное значение мягкого предела.
Функция getrusage() возвращает информацию об использовании ресурсов вызывающим процессом. Она также возвращает информацию о сыновнем процессе, завершения которого ожидает вызывающий процесс. Параметр whoможет иметь следующие значения:
RUSAGE_SELF
RUSAGE_CHILDREN
Если параметру whoпередано значение RUSAGE_SELF,то возвращаемая информация будет относиться к вызывающему процессу. Если же параметр whoсодержит значение RUSAGE_CHILDREN,то возвращаемая информация будет относиться к потомку вызывающего процесса. Если вызывающий процесс не ожидает завершения своего потомка, информация, связанная с ним, отбрасывается (не учитывается). Возвращаемая информация передается через параметр r_usage,который указывает на структуру rusage.Эта структура содержит члены, перечисленные и описанные в табл. 3.7. При успешном выполнении функция возвращает число 0, в противном случае — число -1.
Читать дальше