Самьюэл Алекс
Шрифт:
7.2. Каталоги процессов
Файловая система
/proc
содержит по одному каталогу для каждого выполняющегося в данный момент процесса. Именем каталога является идентификатор процесса. [22] Каталоги появляются и исчезают динамически по мере запуска и завершения процессов. В каждом каталоге имеются файлы, предоставляющие доступ к различной информации о процессе. Собственно говоря, на основании этих каталогов файловая система /proc
и получила свое имя.22
В некоторых UNIX-системах эти идентификаторы дополняются нулями, в Linux — нет.
В каталогах процессов находятся следующие файлы.
■
cmdline
. Содержит список аргументов процесса; описан в разделе 7.2.2, "Список аргументов процесса". ■
cwd
. Является символической ссылкой на текущий рабочий каталог процесса (задаётся, к примеру, функцией chdir
). ■
environ
. Содержит переменные среды процесса; описан в разделе 7.2.3, "Переменные среды процесса". ■
exe
. Является символической ссылкой на исполняемый файл процесса; описан в разделе 7.2.4. "Исполняемый файл процесса". ■
fd
. Является подкаталогом, в котором содержатся ссылки на файлы, открытые процессом: описан в разделе 7.2.5, "Дескрипторы файлов процесса". ■
maps
. Содержит информацию о файлах, отображаемых в адресном пространстве процесса. О механизме отображения файлов в памяти рассказывалось в главе 5. "Взаимодействие процессов". Для каждого такого файла выводится соответствующий диапазон адресов в адресном пространстве процесса, права доступа, имя файла и пр. К числу отображаемых файлов относятся исполняемый файл процесса, а также загруженные библиотеки. ■
root
. Является символической ссылкой на корневой каталог процесса (обычно это /
). Корневой каталог можно сменить с помощью команды chroot
или функции chroot
. ■
stat
. Содержит статистическую информацию о процессе. Эти же данные представлены в файле status
, но здесь они находятся в неотформатированном виде и записаны в одну строку. Такой формат труден для восприятия, зато проще в плане синтаксического анализа. ■
statm
. Содержит информацию об использовании памяти процессом, описан в разделе 7.2.6. "Статистика использования процессом памяти". ■
status
. Содержит статистическую информацию о процессе, причем в отформатированном виде; описан в разделе 7 2.7, "Статистика процесса". ■
cpu
. Этот файл появляется только в симметричных многопроцессорных системах и содержит информацию об использовании процессорного времени (пользователями и системой). Из соображений безопасности права доступа к некоторым файлам предоставляются только владельцу процесса и суперпользователю.
7.2.1. Файл /proc/self
В файловой системе
/proc
есть дополнительный элемент, позволяющий программам находить информацию о своем собственном процессе. Файл /proc/self
является символической ссылкой на каталог, соответствующий текущему процессу. Естественно, содержимое ссылки меняется в зависимости от того, кто к ней обращается. Например, программа, представленная в листинге 7.2, с помощью файла
/proc/self
определяет свой идентификатор процесса (это делается лишь в демонстрационных целях, гораздо проще пользоваться функцией getpid
, описанной в разделе 3.1.1, "Идентификаторы процессов"). Для чтения содержимого символической ссылки вызывается функция readlink
(описана в разделе 8.11, "Функция readlink: чтение символических ссылок"). Листинг 7.2. (get-pid.c) Получение идентификатора процесса из файла
/proc/self
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
/* Определение идентификатора вызывающего процесса
на основании символической ссылки /proc/self. */
pid_t get_pid_from_proc_self {
char target[32];
int pid;
/* Чтение содержимого символической ссылки. */
readlink("/proc/self", target, sizeof(target));