Получить список открытых файлов (дескрипторов) в OS X
Я хотел бы получить список открытых файлов в процессе на os x (10.9.1). В Linux я смог получить это от /proc/PID/fd
. Однако я не уверен, как получить то же самое в OS X. Я обнаружил, что procfs не присутствует в OS X (по умолчанию возможны возможные реализации, но я не хочу идти таким образом).
Итак, как мне получить (изначально) список открытых файлов в процессе на OS X. Один из способов - lsof
. есть ли какая-либо другая поддержка? сообщите мне, где я могу получить дополнительную информацию об этом.
Спасибо.
Ответы
Ответ 1
Как минимум на OSX 10.10 (Yosemite, не проверял Mavericks), вы можете получить список открытых файлов по процессам через приложение мониторинга активности по умолчанию. Просто дважды щелкните соответствующий процесс в списке и выберите вкладку "Открыть файлы и порты" во всплывающем окне.
Совет: cmd + f ярлык на этой панели позволяет искать и выделять содержимое.
Ответ 2
Мне было трудно заставить Activity Monitor отображать открытые файлы для процесса, который выполнялся как root (через sudo). В исходном вопросе упоминается lsof
, и он точно выполняет трюк. Если вы знаете имя процесса или PID, это очень быстро.
Найти процессы по имени:
lsof -c processname
Найти процессы с помощью PID:
lsof -p 123
(Префикс с sudo
при необходимости, например, если вы не являетесь владельцем процесса.)
Ответ 3
Это работает для некоторых вещей:
sudo fs_usage | grep dev
для /dev/
файлов или подобных файлов.
Ответ 4
Я использую приложение What Open, которое очень удобно (с фильтрами, выбором диска,...).
Вы можете найти его там: http://whatsopen.en.softonic.com/mac.
Ответ 5
Чистый и простой подход для проверки текущего процесса (, т.е. эквивалент /proc/self/fd
в Linux ) заключается в использовании ls /dev/fd/
:
например
$ touch "file"
$ exec 3<>file
$ ls /dev/fd/
0 1 2 3
Ответ 6
Поскольку вы спросили: "Доступна ли какая-либо другая поддержка [кроме lsof]?", попробуйте следующее:
Создайте инструмент командной строки, используя API-интерфейс "proc_pidinfo", указанный в выбранном ответе на этот вопрос: Как я могу программно получить список дескрипторов открытых файлов для данного PID OS X?
Вы можете использовать proc_pidinfo с опцией PROC_PIDLISTFDS для перечисления файлов, используемых данным процессом. Затем вы можете использовать proc_pidfdinfo для каждого файла, в свою очередь, с опцией PROC_PIDFDVNODEPATHINFO, чтобы получить свой путь.