Читаем Основы программирования в Linux полностью

Приложения могут определять и изменять свои (и чужие) приоритеты с помощью функций getpriority и setpriority. Процесс, исследуемый или изменяемый с помощью этих функций, может быть задан идентификатором процесса, группы или пользователя. Параметр which описывает, как следует интерпретировать параметр who (табл. 4.11).

Таблица 4.11

Параметр whichОписание
PRIO_PROCESSwho — идентификатор процесса
PRIO_PGRPwho — идентификатор группы
PRIO_USERwho — идентификатор пользователя

Итак, для определения приоритета текущего процесса вы можете выполнить следующий вызов:

priority = getpriority(PRIO_PROCESS, getpid());

Функция setpriority позволяет задать новый приоритет, если это возможно.

По умолчанию приоритет равен 0. Положительные значения приоритета применяются для фоновых задач, которые выполняются, только когда нет задачи с более высоким приоритетом, готовой к выполнению. Отрицательные значения приоритета заставляют программу работать интенсивнее, выделяя большие доли доступного времени ЦП. Диапазон допустимых приоритетов — от -20 до +20. Часто это приводит к путанице, поскольку, чем выше числовое значение, тем ниже приоритет выполнения.

Функция getpriority возвращает установленный приоритет в случае успешного завершения или -1 с переменной errno, указывающей на ошибку. Поскольку значение -1 само по себе обозначает допустимый приоритет, переменную errno перед вызовом функции getpriority следует приравнять нулю и при возврате из функции проверить, осталась ли она нулевой. Функция setpriority возвращает 0 в случае успешного завершения и -1 в противном случае.

Предельные величины, заданные для системных ресурсов, можно прочитать и установить с помощью функций getrlimit и setrlimit. Обе они для описания ограничений ресурсов используют структуру общего назначения rlimit. Она определена в файле sys/resource.h и содержит элементы, перечисленные в табл. 4.12.

Таблица 4.12

Элемент rlimitОписание
rlim_t rlim_curТекущее, мягкое ограничение
rlim_t rlim_maxЖесткое ограничение

Определенный выше тип rlim_t — целочисленный тип, применяемый для описания уровней ресурсов. Обычно мягкое ограничение — это рекомендуемое ограничение, которое не следует превышать; нарушение этой рекомендации может вызвать возврат ошибок из библиотечных функций. При превышении жесткого ограничения система может попытаться завершить программу, отправив ей сигнал, например, сигнал SIGXCPU при превышении ограничения на потребляемое время ЦП и сигнал SIGSEGV при превышении ограничения на объем данных. В программе можно самостоятельно задать для любых значений собственные мягкие ограничения, не превышающие жесткого ограничения. Допустимо уменьшение жесткого ограничения. Увеличить его может только программа, выполняющаяся с правами суперпользователя.

Ограничить можно ряд системных ресурсов. Эти ограничения описаны в параметре resource функций rlimit и определены в файле sys/resource.h, как показано в табл. 4.13.

Таблица 4.13

Параметр resourceОписание
RLIMIT_COREОграничение размера файла дампа ядра, в байтах
RLIMIT_CPUОграничение времени ЦП, в секундах
RLIMIT_DATAОграничение размера сегмента data(), в байтах
RLIMIT_FSIZEОграничение размера файла, в байтах
RLIMIT_NOFILEОграничение количества открытых файлов
RLIMIT_STACKОграничение размера стека, в байтах
RLIMIT_ASОграничение доступного адресного пространства (стек и данные), в байтах

В упражнении 4.15 показана программа limits.c, имитирующая типичное приложение. Она также задает и нарушает ограничения ресурсов.

Упражнение 4.16. Ограничения ресурсов

1. Включите заголовочные файлы для всех функций, которые вы собираетесь применять в данной программе:

#include  \

#include

#include

#include

#include

#include

#include

2. Функция типа void записывает 10 000 раз строку во временный файл и затем выполняет некоторые арифметические вычисления для загрузки ЦП:

void work() {

 FILE *f;

 int i;

 double x = 4.5;

 f = tmpfile();

 for (i = 0; i < 10000; i++) {

  fprintf(f, "Do some output\n");

  if (ferror(f)) {

Перейти на страницу:

Похожие книги

Полное руководство по Microsoft Windows XP
Полное руководство по Microsoft Windows XP

В книге известного американского автора описывается среда ОС Windows XP и принципы ее функционирования, приведен сравнительный анализ Windows XP с предшествующими версиями операционной системы Windows. Рассматриваются вопросы применения и модификации нового интерфейса с целью получения прямого доступа ко всем функциям Windows XP обсуждаются варианты подключения к компьютерным сетям. Несколько разделов посвящены работе с реестром и конфигурационными файлами, мультимедийным функциям и разнообразным системным службам, а также методам решения проблем с программным обеспечением и оборудованием. Особое внимание уделено обеспечению безопасности операционной системы.Издание адресовано пользователям и сетевым администраторам, желающим активно применять возможности операционной системы Windows XP (в том числе и недокументированные).

Джон Поль Мюллер , Питер Нортон

ОС и Сети / Книги по IT