3

Как долго хранятся символические ссылки из файловых дескрипторов в /proc /PID /fd /?

В течение полной жизни процесса?

Как насчет того, когда это многопоточный процесс?

Есть ли у меня гарантия, что после нескольких часов работы все файлы, которые были открыты в какой-то момент времени, будут перечислены здесь? В настоящее время ссылки здесь пронумерованы от 0 до n, между ними не пропущено ни одного номера. Может ли случиться так, что номер отсутствует? Или файл просто исчезает в той же точке, без признаков того, что он когда-либо был открыт?

Tnx.

1 ответ1

6

Файловая система /proc является виртуальной - она отражает текущее состояние процессов, а /proc/$pid/fd отображает только файлы, которые процесс держит открытыми прямо сейчас. Если файл или сокет закрыты, их запись в /proc/$pid/fd/ автоматически исчезает. Если процесс завершается, весь каталог /proc/$pid исчезает.

Файловые дескрипторы всегда начинаются с 0, и ядро всегда присваивает минимально возможное неотрицательное число вновь создаваемым файловым дескрипторам. Тем не менее, процесс всегда может закрыть любой дескриптор файла, который у него есть - поэтому вполне возможно, что fd/ будет содержать "дыры"; например, fd/0 fd/1 fd/3 fd/6 или аналогичный.

Для многопоточных процессов /proc/$pid отображает состояние основного потока - дополнительные потоки имеют подкаталоги в /proc/$pid/task/ (одна задача представляет один Pthread). Однако POSIX.1 требует, чтобы все Pthread-ы внутри процесса имели одинаковые файловые дескрипторы, поэтому содержимое fd/ будет одинаковым.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .