Читаем Linux API. Исчерпывающее руководство полностью

printf("Hello world");

execlp("sleep", "sleep", "0", (char *) NULL);

}

27.6. Представьте, что родительский процесс установил обработчик для SIGCHLD и заблокировал этот сигнал. После того как один из его потомков завершается, родитель выполняет вызов wait(), чтобы получить статус потомка. Что произойдет, если родитель разблокирует SIGCHLD? Напишите программу, чтобы проверить свой ответ. Имеет ли это какое-либо отношение к программе, вызывающей функцию system()?

28. Подробнее о создании процесса и выполнении программы

Эта глава дополняет материал, изложенный в главах 24–27, охватывая различные темы, касающиеся создания процесса и выполнения программы. Будет описан учет используемых ресурсов — функция, ядра, которая в момент завершения любого процесса в системе записывает его учетную информацию. Мы рассмотрим системный вызов clone(), который представляет собой низкоуровневый программный интерфейс для создания потоков выполнения в Linux. За этим последует сравнение производительности fork(), vfork() и clone(). В конце будет рассмотрено влияние вызовов fork() и exec() на атрибуты процесса.


28.1. Учет ресурсов, используемых процессом


Когда система учета ресурсов включена, ядро записывает в общесистемный файл данные о каждом процессе, который оно завершает. Каждая такая запись содержит различные сведения, собираемые ядром, такие как код завершения процесса и сколько тот затратил процессорного времени. Учетный файл можно анализировать с помощью стандартных инструментов (вызов sa(8) предоставляет краткую сводку, а lastcomm(1) показывает информацию о ранее выполненных командах) или специализированных приложений.

В силу исторических причин учет ресурсов изначально применяли для взимания платы с пользователей за работу в многопользовательских UNIX-системах. Однако с его помощью также можно получать сведения о процессах, которые не собираются и не могут предоставляться их родителями.

Система учета ресурсов не описывается в стандарте SUSv3, хотя и доступна в большинстве разновидностей UNIX. Формат записей и местоположение файла, в котором они хранятся, могут варьироваться в зависимости от реализации. В этом разделе мы сосредоточимся на деталях, характерных для Linux, не забывая при этом отмечать некоторые различия, встречающиеся в других системах UNIX.

В Linux система учета ресурсов является опциональным компонентом ядра, который настраивается посредством параметра CONFIG_BSD_PROCESS_ACCT.


Включение и отключение учета ресурсов

Для включения и отключения учета ресурсов привилегированный процесс (CAP_SYS_PACCT) должен воспользоваться системным вызовом acct(). Этот вызов редко применяется в прикладных программах. Обычно учет ресурсов включается при каждом запуске системы путем размещения подходящих команд в загрузочных скриптах.

#define _BSD_SOURCE

#include


int acct(const char *acctfile);

Возвращает 0 при успешном завершении и –1 при ошибке

Чтобы включить учет ресурсов, аргументу acctfile нужно передать путь к обычному существующему файлу. Типичный путь к учетному файлу имеет вид /var/log/pacct или /usr/account/pacct. Для отключения учета ресурсов аргументу acctfile достаточно передать NULL.

Программа из листинга 28.1 использует вызов acct() для включения и отключения учета ресурсов. По своим возможностям она похожа на консольную команду accton(8).


Листинг 28.1. Включение и выключение учета ресурсов

procexec/acct_on.c

#define _BSD_SOURCE

#include

#include "tlpi_hdr.h"


int

main(int argc, char *argv[])

{

if (argc > 2 || (argc > 1 && strcmp(argv[1], "-help") == 0))

usageErr("%s [file]\n", argv[0]);

if (acct(argv[1]) == –1)

errExit("acct");


printf("Process accounting %s\n",

(argv[1] == NULL)? "disabled": "enabled");

exit(EXIT_SUCCESS);

}

procexec/acct_on.c


Записи в системе учета ресурсов

После включения учета ресурсов данные, записанные в структуру acct, сбрасываются в файл при завершении каждого процесса. Структура acct объявлена в заголовочном файле и имеет следующий вид:

typedef u_int16_t comp_t; /* См. текст */

struct acct {

char ac_flag; /* Флаги учета (см. текст) */

u_int16_t ac_uid; /* Пользовательский идентификатор процесса */

u_int16_t ac_gid; /* Групповой идентификатор процесса */

u_int16_t ac_tty; /* Управляющий терминал процесса (может

равняться 0, если процесс является демоном) */

u_int32_t ac_btime; /* Начальное время (time_t; секунды с начала эры UNIX) */

comp_t ac_utime; /* Пользовательское процессорное время

(такты системного времени) */

comp_t ac_stime; /* Системное процессорное время

(такты системного времени) */

comp_t ac_etime; /* Прошедшее (реальное) время (такты системного времени) */

comp_t ac_mem; /* Среднее потребление памяти (килобайты) */

comp_t ac_io; /* Байты, переданные вызовами read(2) и write(2)

(не используется) */

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

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

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных