В ОС Linux виртуальная файловая система /proc содержит файлы с текущей информацией о процессах и системе в целом. Файловая система создается в оперативной памяти компьютера в процессе загрузки и используется в качестве интерфейса обмена данными со структурами ядра. Использование файлов /proc/* в большинстве случаев позволяет избавиться от необходимости чтения и записи в устройство /dev/kmem. Большинство расположенных в структуре /proc файлов доступны пользователям только для чтения, а для записи требуют полномочий root.
Для поддержки виртуальной файловой системы /proc при компиляции ядра должна быть включена опция /proc file system support.
Файловая система /proc содержит множество каталогов с численными именами – эти каталоги создаются для каждого запущенного в системе процесса. Имя каталога определяется идентификатором (PID) соответствующего процесса. Каждый из таких каталогов содержит ряд подкаталогов файлов, кратко описанных ниже (таблица 2).
Таблица 2 Файлы в подкаталогах процессов
Имя
|
Назначение
|
auxv
|
Начальные значения aux-вектора процесса, передаваемые операционной системой динамическому компоновщику в качестве стартовых значений.
|
cmdline
|
Содержимое командной строки, использованной для запуска процесса. Командная строка в файле завершается нуль-символом и не содержит символа новой строки.
|
cwd
|
Ссылка на текущий рабочий каталог процесса. Для определения рабочего каталога процесса можно воспользоваться командой типа
cd /proc//cwd; /bin/pwd
|
environ
|
Переменные окружения, используемые процессом. Записи в этом файле разделяются нуль-символами, а в конце файла также может использоваться нуль-символ. Для просмотра переменных окружения процесса можно воспользоваться командой типа
(cat /proc//environ; echo) | tr "00" "n"
|
exe
|
Символьная ссылка на исполняемый файл процесса. Использование команды readlink с именем этого файла в качестве параметра возвращает полное имя исполняемого процесса в системах Linux с ядром версии 2.2 и выше. В Linux 2.0 и более старых версиях возвращается строка вида
[устройство]:индексный_дескриптор
содержащая индексный дескриптор файла и номер устройства, на котором файл хранится.
С символьной ссылкой exe можно работать как с обычным файлом. Например, команда
/proc//exe
приведет к запуску новой копии процесса.
Для поиска файла может использоваться команда
find -inum
|
fd
|
Подкаталог, содержащий по одной символьной ссылке для каждого открытого процессом файла. Имя ссылки соответствует номеру файлового дескриптора для открытого файла, а сама ссылка указывает на открытый процессом файл.
0 указывает на стандартное устройство ввода, 1 – на стандартное устройство вывода, 2 – на стандартный вывод ошибок и т. д.
Символьные ссылки в подкаталоге fd позволяют обманывать программы, которые в качестве входного файла не принимают stdin или в качестве выходного – stdout. В командной строке такой программы можно просто указывать /proc/self/fd/0 в качестве входного файла и в качестве выходного /proc/self/fd/1. Отметим, что предложенная хитрость не сработает для программ, использующих при файловых операциях команду seek, поскольку такие операции не поддерживаются для файлов стандартного ввода-вывода.
Файлы /proc/self/fd/N в Linux – это почти то же самое, что и файлы /dev/fd/N. Фактически, большинство сценариев MAKEDEV в Linux делает символьные ссылки /dev/fd на /proc/self/fd.
|
maps
|
Файл отображения используемых программой областей памяти с указанием прав доступа. Этот файл использует формат:
address perms offset dev inode
00000000-0002f000 r-x-- 00000400 03:03 1401
0002f000-00032000 rwx-p 0002f400 03:03 1401
00032000-0005b000 rwx-p 00000000 00:00 0
60000000-60098000 rwx-p 00000400 03:03 215
60098000-600c7000 rwx-p 00000000 00:00 0
bfffa000-c0000000 rwx-p 00000000 00:00 0
Колонка address указывает используемое процессом адресное пространство памяти, perms – задает права доступа к данной области памяти (r – чтение, w – запись, x – исполнение, s – возможность использования другими процессами, p – приватный блок, копируемый при записи). Колонка offset задает текущее смещение от начала области памяти (указатель позиции), dev задает устройство, а inode указывает индексный дескриптор.
Ядро Linux версии 2.2 использует дополнительное поле, в котором указывается (при возможности) полное имя файла.
|
mem
|
Файл соответствующий содержимому страниц памяти процесса и обеспечивающий доступ к памяти с помощью функций open, read и fseek.
|
mounts
|
Список смонтированных в файловых систем. Содержимое этого файла выводится по команде mount.
|
root
|
Символьная ссылка на корневой каталог, используемый данным процессом.
|
stat
|
Файл с информацией о состоянии процесса. Эти файлы используются командой ps для сбора информации о процессах. Поля файла stat описаны ниже (таблица 3) в порядке их следования в файле.
|
statm
|
Файл с информацией об используемых процессом страницах памяти. Поля файла перечислены ниже:
size общий размер программы resident размер резидентной части share
trs текст (код)
drs данные/стек
lrs
dt число “грязных” страниц
|
status
|
Файл с информацией из stat и statm в более удобном для человеческого восприятия формате.
|
wchan
|
Имя функции ядра, в которой процесс в данный момент “спит”.
|
|