История изменений
Исправление tiandrey, (текущая версия) :
Ну давай по порядку.
- файловый дескриптор - это просто целое неотрицательное число, идентифицирующее поток ввода-вывода для процесса. Поток ввода-вывода - это в простейшем случае открытый файл, но сюда же попадают и сетевые сокеты, и пайпы.
lsof показывает больше, чем список дескрипторов - например, он показывает области памяти, полученные в результате mmap() (работа с файлом через отображение этого файла в память и работу с памятью). У таких областей памяти в столбце FD вместо дескриптора указана строкаmem
.
Там же показана текущая рабочая директория процесса (cwd
), корневая директория процесса (rtd
).
У обычных дескрипторов в этой колонке пишется номер дескриптора и режим, в котором он открыт (r - read, w - write, u - read+write). - дескрипторы могут быть связаны с разными типами файлов. Это отображается в столбце TYPE. Как я уже писал выше, это могут быть обычные файлы (
REG
, regular file), пайпы (FIFO
), юниксовые сокеты (unix
), сетевые сокеты (IPv4
), символьные устройства (CHR
, character device), и т.д. Смотри в мане полный (на самом деле нет :) ) список. В списке не описан типa_inode
. Если процесс работает с inotify, ему тоже возвращаются объекты-дескрипторы, они имеют тип a_inode (anonymous inode, вероятно). - в моей бубунте vlc это динамический бинарник. Соответственно, в списке открытых файлов - все динамические библиотеки, которые нужны для его запуска; они обычно заммаплены (FD=mem).
Дальше идут нумерованные дескрипторы, в моём случае это:- 3 стандартных (0, 1, 2)
- две пары дескрипторов, связанных с одним и тем же пайпом (один на запись, другой на чтение, зачем - хз, возможно, для межпотокового взаимодействия)
- некоторое количество юниксовых сокетов, связанных с DM и около того (pulseaudio, dbus-daemon, mate-session)
- некоторое количество дескрипторов от inotify
- пара символьных устройств - /dev/urandom и /dev/dri/card0 (для direct rendering, вестимо)
- и, наконец-то, дескриптор, связанный с проигрываемым на данный момент файлом.
- числа в графе device - major и minor numbers - идентификаторы устройства, на котором лежит указанный файл.
- файловый дескриптор имеет смысл только в контексте процесса, работающего с вводом-выводом, у разных процессов одни и те же файловые дескрипторы могут быть (и будут!) связаны с разными файлами и прочими потоками ввода-вывода.
Чтобы оставить только обычные дескрипторы, используй команду lsof -a -d 0-9000 -p $(pidof vlc)
.
Исходная версия tiandrey, :
Ну давай по порядку.
- файловый дескриптор - это просто целое неотрицательное число, идентифицирующее поток ввода-вывода для процесса. Поток ввода-вывода - это в простейшем случае открытый файл, но сюда же попадают и сетевые сокеты, и пайпы.
lsof показывает больше, чем список дескрипторов - например, он показывает области памяти, полученные в результате mmap() (работа с файлом через отображение этого файла в память и работу с памятью). У таких областей памяти в столбце FD вместо дескриптора указана строкаmem
.
Там же показана текущая рабочая директория процесса (cwd
), корневая директория процесса (rtd
).
У обычных дескрипторов в этой колонке пишется номер дескриптора и режим, в котором он открыт (r - read, w - write, u - read+write). - дескрипторы могут быть связаны с разными типами файлов. Это отображается в столбце TYPE. Как я уже писал выше, это могут быть обычные файлы (
REG
, regular file), пайпы (FIFO
), юниксовые сокеты (unix
), сетевые сокеты (IPv4
), символьные устройства (CHR
, character device), и т.д. Смотри в мане полный (на самом деле нет :) ) список. В списке не описан типa_inode
. Если процесс работает с inotify, ему тоже возвращаются объекты-дескрипторы, они имеют тип a_inode (anonymous inode, вероятно). - в моей бубунте vlc это динамический бинарник. Соответственно, в списке открытых файлов - все динамические библиотеки, которые нужны для его запуска; они обычно заммаплены (FD=mem).
Дальше идут нумерованные дескрипторы, в моём случае это:- 3 стандартных (0, 1, 2)
- две пары дескрипторов, связанных с одним и тем же пайпом (один на запись, другой на чтение, зачем - хз, возможно, для межпотокового взаимодействия)
- некоторое количество юниксовых сокетов, связанных с DM и около того (pulseaudio, dbus-daemon, mate-session)
- некоторое количество дескрипторов от inotify
- пара символьных устройств - /dev/urandom и /dev/dri/card0
- и, наконец-то, дескриптор, связанный с проигрываемым на данный момент файлом.
- числа в графе device - major и minor numbers - идентификаторы устройства, на котором лежит указанный файл.
- файловый дескриптор имеет смысл только в контексте процесса, работающего с вводом-выводом, у разных процессов одни и те же файловые дескрипторы могут быть (и будут!) связаны с разными файлами и прочими потоками ввода-вывода.
Чтобы оставить только обычные дескрипторы, используй команду lsof -a -d 0-9000 -p $(pidof vlc)
.