Как делает/proc / <pid>/exe, символьная ссылка отличаются от обычных символьных ссылок?

Или возможно

find . -exec grep -H {} \;
24
22.04.2015, 14:20
3 ответа

/ proc / EXE не следует нормальной семантике для символических ссылок. Технически это может считаться нарушением POSIX, но / proc - это специальная файловая система в конце концов.

/ proc / / exe , по-видимому, считается SymLink, когда вы статус . Это удобный способ для ядра экспортировать путь, который он знает для исполняемого процесса. Но когда вы действительно открываете этот «файл», нет никакой нормальной процедуры чтения следующего содержимого SymLink. Вместо этого ядро ​​просто дает вам доступ к записи открытого файла напрямую.

Обратите внимание, что, когда вы LS -L A / PREC / / EXE псевдофиль для процесса исполняемый процесс которого был удален, цель Symlink имеет строку «(удалить) «В конце этого. Обычно это будет несерьезно в SymLink: определенно не является файлом, который живет на целевом пути с именем, который заканчивается «(удален)».

TL; DR Proc Реализация файловой системы просто делает свою магическую вещь с разрешением PathName.

20
27.01.2020, 19:41

Согласно странице руководства / proc в Linux 2.2 и новее, файл представляет собой символическую ссылку, содержащую фактический путь к исполняемой команде. Очевидно, двоичный файл загружается в память, а / proc / [pid] / exe указывает на содержимое двоичного файла в памяти .

С другой стороны, в Linux 2.0 и ранее / proc / [pid] / exe , по-видимому, является указателем на файл (в файловой системе), который был запущен.

Таким образом, если вы выполнили тот же список команд в Linux 2.0 или более ранней версии, вероятно, вы получите ошибку «нет такого файла или каталога».

4
27.01.2020, 19:41

Все файлы в /procгенерируются по требованию. Из-за этого они иногда ведут себя немного иначе, чем обычные файлы.

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

/proc/<pid>/exe— это ссылка на описание открытого файла внутри ядра. Невозможно точно передать описание открытого файла :, это структура данных внутри ядра. Так что ядро ​​примерно представляет его :как символьную ссылку на файл. Ядро запоминает имя файла и даже отслеживает файл, если он переименован, благодаря информации, поддерживаемой уровнем абстрактной файловой системы. Если файл удаляется, ядро ​​запоминает последнее известное ему имя и добавляет к имени (deleted). Строка, возвращаемая в качестве цели символической ссылки, генерируется «на лету» каждый раз, когда процесс вызывает для нее readlink. Под капотом открытие /proc/<pid>/exeсокращает обычное разрешение символической ссылки и напрямую открывает описание файла. То же самое относится к /proc/<pid>/fd/<number>, /proc/<pid>/cwd, /proc/<pid>/rootи другим подобным ссылкам.

Другим примером «волшебной» символической ссылки является /proc/self. Он генерируется на лету, чтобы указать на каталог /proc/<pid>процесса, который обращается к нему.

3
20.08.2021, 12:34

Теги

Похожие вопросы