Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Программирование для Linux. Профессиональный подход - Митчелл М.

Митчелл М., Оулдем Дж., Самьюал А. Программирование для Linux. Профессиональный подход — М.: Вильямс , 2003. — 288 c.
ISBN 5-8459-0243-6
Скачать (прямая ссылка): programmirovaniedlyalinux2003.djvu
Предыдущая << 1 .. 68 69 70 71 72 73 < 74 > 75 76 77 78 79 80 .. 128 >> Следующая

write (fd" entry, strlen (entry)); write (fd, -\n", 1); fsync (fd); close
(fd);
)
Аналогичное действие выполняет другой системный вызов: fdatasync (). Но
если функция fsync () гарантирует, что дата модификации файла будет
обновлена, то функция fda t async () этого не делает, а лишь гарантирует
запись данных. В принципе это означает, что функция fdatasync (} способна
выполняться быстрее, чем fsync (), так как ей требуется выполнить одну
операцию записи на диск, а не две. Но в настоящее время в Linux обе
функции работают одинаково, обновляя дату модификации.
Файл можно также открыть в режиме синхронного ввода-вывода, при котором
все операции записи будут немедленно фиксироваться на диске. Для этого в
функции open () следует указать флаг 0_S YNC.
8.5. Функции getrlimit() и setrlimitQ: лимиты ресурсов
Функции get г limit () и setrlimit() позволяют процессу определять и
задавать лимиты использования системных ресурсов. Аналогичные действия
выполняет команда ul iniit, которая ограничивает доступ запускаемых
пользователем программ к ресурсам.
У каждого ресурса есть два лимита: жесткий и нежесткий. Второе значение
никогда не может быть больше первого, и лишь процессы с привилегиями
суперпользователя имеют право менять жесткий лимит. Обычно приложение
уменьшает нежесткий лимит, ограничивая потребление системных ресурсов-
Обе функции принимают два аргумента: код, задающий тип ограничения, и
указатель на структуру типа rlinut. Функция getrlimit () заполняет поля
этой структуры, тогда как функция setrlimitO проверяет их и
соответствующим образом меняет лимит. У структуры rlimit два поля: в поле
rlim_cur содержится значение нежесткого лимита, а в поле г1im_max -
значение жесткого лимита.
Ниже перечислены коды наиболее полезных лимитов, допускающих возможность
изменения.
¦ RLIMIT_CPU. Это максимальный интервал времени центрального
процессора (в секундах). занимаемый программой. Именно столько времени
отводится программе на доступ к процессору. В случае превышения данного
ограничения программа будет завершена по сигналу SIGXCPU.
¦ RLIMIT_DATA. Это максимальный объем памяти, который программа может
запросить для своих данных. Запросы на дополнительную память будут
отвергнуты системой.
¦ RLIMIT NPROC. Это максимальное число дочерних процессов которые
могут быть запущены пользователем. Если процесс вызывает функцию fork (),
а лимит уже исчерпан, функция завершается ошибкой.
¦ RLIMIT_NOFILE. Это максимальное число файлов, которые могут быть
одновременно открыты процессом.
Глана 8. Системные вызовы Linux 159
Программа, приведенная в листинге 8.4, задаст односекуидный лимит
использования центрального процессора, после чего переходит в бесконечный
цикл. Как только про-
I рамма превышает установленный ею же лимит. ОС Linux уничтожает ее.
Листинг 8.4. (limii-cpu.c) Задание ограничения на использование
центрального процессора
#include <sys/resource.h>
¦include <sys/time.h>
¦include <unistd-h>
int main (]
(
struct rlimit rl;
/* Определяем текущие лимиты. */ getrlimit (RLIMIT_CPU, brl>;
/* Ограничиваем время доступа к процессору одной секундой. */
rl.rlur\_cur = 1;
setrlimit (RLIMIT_CPU. brl);
/* Переходим в бесконечный цикл- */ while (1);
return 0;
)
Когда программа завершается по сигналу SIGXCPU, интерпретатор команд
выдает поясняющее сообщение:
% ./limit_cpu
CPU time limit exceeded
8.6. Функция getrusageQ: статистика процессов
Функция getrusage () запрашивает у ядра статистику работы процессов. Если
первый аргумент функции равен RUSAGE SELF. процесс получит информацию о
самом себе. Если же первым аргументом является константа RUSAGE_CHILDREN,
будет выдана информация обо всех его завершившихся дочерних процессах.
Второй аргумент- это указатель на структуру типа rusage, в которую
заносятся статистические данные.
Перечислим наиболее интересные поля этой структуры.
¦ ru_utime. Здесь находится структура типа timeval, в которой
указано, сколько пользовательского времени (в секундах) ушло на
выполнение процесса. Это время, затраченное центральным процессором на
выполнение программного кода, а не системных выловов.
¦ ru_stime. Здесь находится структура типа timeval, в которой
указано, сколько системного времени (в секундах) ушло на выполнение
процесса. Это время, затраченное центральным процессором на выполнение
системных вызовов от имени данного процесса.
¦ ru_maxrss. Это максимальный объем физической памяти, которую
процесс занимал в какой-то момент своего выполнения.
В листинге 8.5 приведена функция, которая показывает, сколько
пользовательского и системного времеии потребил текущий процесс.
160 Часть II. Секреты Linux
Листинг 8.5. (print-cpu-titnes.c) Определение пользовательского и
системного времени, затраченного на выполнение текущего процесса
"include <stdio-h>
¦include <sys/resource.h>
#include <sys/time.h>
"include <unistd.h>
void prmt_cpu_tirae()
{
struct rusage usage; getrusage (RUSAGE_SELF, busage);
Предыдущая << 1 .. 68 69 70 71 72 73 < 74 > 75 76 77 78 79 80 .. 128 >> Следующая