Получить ограничения по использованию ресурсов
#include <sys/resource.h>int getrlimit( int resource,struct rlimit *rlp );int getrlimit64( int resource,struct rlimit64 *rlp );
libc
Функция getrlimit() устанавливает ограничения на потребление различных системных ресурсов процессом и каждым процессом, который он создает. Функция getrlimit64() является 64
-битной версией getrlimit().
Каждый вызов getrlimit() определяет конкретный ресурс, над которым нужно работать, а также ограничение ресурса. Ограничение ресурса - это пара значений:
Процесс может изменить мягкие ограничения на любое значение, которое меньше или равно жесткому ограничению. Процесс может (необратимо) снизить свое жесткое ограничение до любого значения, которое больше или равно мягкому ограничению. Только процесс с эффективным идентификатором пользователя root может установить жесткое ограничение. Как жесткие, так и мягкие ограничения можно изменить одним вызовом setrlimit() с учетом ограничений, описанных выше. Ограничения могут иметь «бесконечное» значение RLIM_INFINITY
.
Поскольку информация об ограничениях хранится в информации о каждом процессе, встроенная команда оболочки ulimit (см. ksh в Справочнике по Утилитам) должна непосредственно выполнить этот системный вызов, если он повлияет на все будущие процессы, создаваемые оболочкой.
На эти параметры влияют значения текущего ограничения следующих ресурсов:
Ресурс | Параметр |
---|---|
RLIMIT_FSIZE | FCHR_MAX |
RLIMIT_NOFILE | OPEN_MAX |
При использовании getrlimit(), если ограничение ресурса может быть правильно представлено в объекте типа rlim_t, то возвращается его представление; в противном случае, если значение ограничения ресурса равно значению соответствующего сохраненного жесткого ограничения, возвращается значение RLIM_SAVED_MAX
; в противном случае возвращается значение RLIM_SAVED_CUR
.
Допускается ограничение, значение которого больше RLIM_INFINITY
.
Семейство функций exec*() также приводит к сохранению ограничений ресурсов.
#include <stdio.h>#include <stdlib.h>#include <sys/resource.h>int main( void ){struct rlimit curr_limits;if ( getrlimit( RLIMIT_NPROC, &curr_limits ) == -1 ){perror( "The call to getrlimit() failed." );return (EXIT_FAILURE);} else {printf( "The current maximum number of processes is %d.\n", (int)curr_limits.rlim_cur );printf( "The hard limit on the number of processes is %d.\n", (int)curr_limits.rlim_max );}return (EXIT_SUCCESS);}
getrlimit() — POSIX 1003.1 X/Open Systems Interfaces Extension; getrlimit64() — Поддержка больших файлов
rlim_t, rlim64_t, struct rlimit, struct rlimit64 brk(), execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), fork(), getdtablesize(), malloc(), open(), setrlimit(), setrlimit64(), signal(), sysconf()
ulimit - встроенная команда (см. запись для ksh в Справочнике по Утилитам)
Предыдущий раздел: Описание API системной библиотеки