Тот факт, что содержимое этого файла со временем изменяется, обуславливает следующий подход использования /proc-файлов: когда они состоят из множества записей, их нужно анализировать с оглядкой и искать в таком случае совпадение со строкой, содержащей конкретное строковое значение (например, PPid:), а не работать с файлом по логическим номерам строк.

В табл. 12.1 перечислены другие файлы, которые находятся в каждом каталоге /proc/PID.

Таблица 12.1. Отдельные файлы в каждом каталоге /proc/PID

Файл — Описание (атрибут процесса)

cmdline — Аргументы командной строки с \0 в качестве разделителя

cwd — Символьная ссылка на текущий рабочий каталог

environ — Пары вида ИМЯ=значение списка переменных среды с \0 в качестве разделителя

exe — Символьная ссылка на выполняемый файл

fd — Каталог, содержащий символьные ссылки на файлы, открытые данным процессом

maps — Отображения памяти

mem — Виртуальная память процесса (для получения правильного смещения перед вводом-выводом следует воспользоваться функцией lseek())

mounts — Точки монтирования для данного процесса

root — Символьная ссылка на корневой каталог

status — Различная информация (например, идентификаторы процесса, полномочия, использование памяти, сигналы)

task — Содержит по одному подкаталогу для каждого потока в процессе (Linux 2.6)

Каталог /proc/PID/fd

В каталоге /proc/PID/fd содержится по одной символьной ссылке для каждого файлового дескриптора, открытого процессом. Каждая из этих символьных ссылок имеет название, совпадающее с номером дескриптора, например, /proc/1968/fd/1 является символьной ссылкой на стандартный вывод процесса 1968. Дополнительные сведения можно найти в разделе 5.11.

Для удобства, любой процесс может обратиться к своему собственному каталогу /proc/PID с помощью символьной ссылки /proc/self.

Потоки: каталог /proc/PID/task

В Linux 2.4 для соответствующей поддержки модели потоков POSIX добавилось понятие групп потоков. Поскольку некоторые атрибуты для потоков в группе потоков различаются, в Linux 2.4 добавился подкаталог task, расположенный в каталоге /proc/PID. Для каждого имеющегося в процессе потока ядро предоставляет подкаталог /proc/PID/task/TID, где TID является идентификатором потока. (То же самое число будет возвращено при вызове в потоке функции gettid().)

В подкаталоге /proc/PID/task/TID находится набор файлов и каталогов, в точности похожий на расположенный в каталоге /proc/PID. Поскольку потоки совместно используют большое количество атрибутов, множество сведений в этих файлах одинаково для каждого из потоков процесса. Но там, где есть для этого смысл, в таких файлах для каждого из потоков показывается различная информация. Например, в файлах /proc/PID/task/TID/status для группы потоков некоторые поля State, Pid, SigPnd, SigBlk, CapInh, CapPrm, CapEff и CapBnd могут иметь для каждого потока различные значения.

12.1.2. Системная информация, находящаяся в /proc

Доступ к информации, распространяющейся на всю систему, предоставляется в различных файлах и подкаталогах, находящихся в /proc. Некоторые из них показаны на рис. 12.1.

Рис. 12.1. Отдельные файлы и подкаталоги, находящиеся в /proc

Файлы, упомянутые на рис. 12.1, рассматриваются в разных местах данной книги. Основное назначение подкаталогов, перечисленных на рис. 12.1, сведено в табл. 12.2.

Таблица 12.2. Назначение отдельных подкаталогов, находящихся в /proc

Каталог — Информация, предоставляемая файлами в этом каталоге

/proc — Различная системная информация

/proc/net — Информация состояния сети и сокетов

/proc/sys/fs — Настройки, относящиеся к файловым системам

/proc/sys/kernel — Различные общие настройки ядра

/proc/sys/net — Настройки сети и сокетов

/proc/sys/vm — Настройки, касающиеся управления памятью

/proc/sysvipc — Информация об IPC-объектах System V

12.1.3 Доступ к файлам, находящимся в /proc

Доступ к файлам, находящимся в /proc, зачастую осуществляется с использованием сценариев оболочки (большинство /proc-файлов, хранящих множество значений, могут быть легко проанализированы с помощью таких языков написания сценариев, как Python или Perl). Например, содержимое /proc-файла можно изменить и просмотреть, используя следующие команды оболочки:

# echo 100000 > /proc/sys/kernel/pid_max

# cat /proc/sys/kernel/pid_max

100000

Доступ к /proc-файлам также может быть получен из программы с использованием обычных системных вызовов файлового ввода-вывода. При доступе к этим файлам применяются кое-какие ограничения.

• Некоторые /proc-файлы предназначены только для чтения, то есть они существуют лишь для отображения информации о ядре и не могут использоваться для ее изменения. Это справедливо для большинства файлов в каталогах /proc/PID.

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

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