Доступ / proc - PullRequest
       51

Доступ / proc

3 голосов
/ 14 сентября 2011

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

Приложение будетзапускаться в Linux (ядро> = 2.6), а не в любой другой ОС Unix.Он должен иметь доступ к любым данным в / proc, я не могу сказать, что необходимо сейчас, поскольку спецификации еще не ясны, но весь каталог / proc относится к приложению.Прежде всего: есть ли хорошая документация, которая охватывает все функции, добавленные / удаленные из версии ядра в версию ядра?В частности, меня интересует формат отдельных файлов.Могу ли я принять это как должное?Меняется ли оно между версиями ядра?

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

Кроме того: существует ли определенный список функций, которые можно активировать / деактивировать с помощью параметров ядра (кроме, конечно, самой / proc-функции)?Я ищу список файлов / каталогов, которые существуют только с соответствующими параметрами, установленными в ядре.

В качестве примера того, о чем я думаю, это ссылка на man-страницу proc (http://linux.die.net/man/5/proc), которая включает много полезной информации, например, некоторые опции включают в себя самую раннюю версию ядра, в которой они были доступны, некоторые включают, требуется ли загружать модуль. Это не описывает формат вывода всей информации, что является чем-тоМне нужно, если я хочу разобрать его (например, если он согласован во всех версиях ядра или изменен в какой-то момент).

Второе, что меня интересует, это то, что происходит, если запрашиваемый процесс умирает во время запроса.Какой у меня временной интервал?Например, если я собираюсь получить список процессов, считывающих все структуры, и анализировать их одну за другой, что произойдет, если мой процесс x умрет, прежде чем я смогу его прочитать?Даже если я проверю, существует ли каталог, он все равно может исчезнуть через один вызов приложения.

И последнее, но не менее важное: существует ли какой-либо основной дистрибутив, который не монтирует proc?

Насколько я понимаю, многие общие инструменты основаны на интерфейсе / proc, например lsmod илиfree, поэтому я предполагаю, что / proc может существовать почти всегда.

1 Ответ

4 голосов
/ 03 февраля 2012

Интерфейсы /proc довольно стабильны (в отличие от интерфейсов /sys), даже если ничего не гарантировано. Почти все изменения обратно совместимы, по крайней мере, если они были в течение нескольких версий. Вам следует придерживайтесь документированных интерфейсов, чтобы быть в безопасности. Если файл существует, его формат может быть расширен в более поздних версиях, но обычно обратно совместимым способом, например, добавление столбцов в таблицу. Части, которые наиболее подвержены риску исчезновения, являются частями аппаратных систем, таких как ACPI или SCSI, которые переходят на /sys (с длительным переходным периодом, когда существуют оба).

Большая часть информации не зависит от архитектуры, за исключением информации об оборудовании (например, /proc/cpuinfo имеет очень разные поля в разных архитектурах).

Основная документация Documentation/filesystems/proc.txt в исходном коде ядра. Рассмотрим proc(5) в качестве обзора и proc.txt в качестве мелких деталей. Документация по ядру часто бывает неполной, поэтому не удивляйтесь, если вам иногда придется прибегнуть к чтению исходного кода.

Большинство необязательных частей /proc активируются по умолчанию, если драйвер, данные которого он предоставляет, включен в ядро. Исключения в основном связаны с аппаратными функциями, к которым редко нужно обращаться извне ядра; если вам нужен доступ к этим функциям, вы, вероятно, уже ожидаете, что вам придется копать глубже. Для получения подробной информации просмотрите файлы Kconfig в исходном коде ядра.

Данные процесса (или данные об оборудовании, относящиеся к съемному оборудованию или предоставляемые выгружаемыми модулями) могут исчезнуть у вас под носом. Большинство файлов в /proc могут быть прочитаны атомарно, с одним вызовом read с буфером разумного размера; если вы выполняете несколько read вызовов последовательно, драйверы должны гарантировать, что вы получите правильно сформированные данные. Нет способа гарантировать атомарность между чтениями отдельных файлов; если вы читаете информацию о процессе, этот процесс может прекратиться в любой момент и, в принципе, может быть заменен другим процессом с тем же PID до того, как вы закончите.

Как сказано в описании /proc, «каждый должен сказать Y здесь». Все настольные / серверные системы Linux и большинство встроенных систем Linux должны иметь /proc; это требует много вещей, включая ps и другие команды управления процессами, множество инструментов, связанных с файловой системой и устройствами, и загрузку модулей. Единственные системы, которые могут обойтись без /proc, - это очень маленькие специализированные встроенные системы, которые поддерживают единую конфигурацию оборудования и запускают фиксированный набор программ. Вы можете рассчитывать на то, что он здесь.

...