Получить список открытых файлов (дескрипторов) в OS X

Я хотел бы получить список открытых файлов в процессе os x (10.9.1). В Linux я смог получить это от /proc/PID/fd. Однако я не уверен, как получить то же самое на OS X. я обнаружил, что procfs нет в OS X (по умолчанию. возможные реализации присутствуют,но я не хочу идти этим путем).

Итак, как мне получить (изначально) список открытых файлов в процессе на OS X. Один из способов -lsof. есть ли другой поддержки? пожалуйста, дайте мне знать, где я могу получить подробнее об этом.

спасибо.

7 ответов


по крайней мере, на OSX 10.10 (Yosemite, не проверял Mavericks), вы можете получить список открытых файлов по процессу через приложение activity monitor по умолчанию. Просто дважды щелкните соответствующий процесс в списке и выберите вкладку "Открыть файлы и порты" во всплывающем окне.

Совет: cmd + F ярлык на этой панели позволяет осуществлять поиск и выделение содержимого.


мне было трудно получить Монитор активности, чтобы показать открытые файлы для процесса, который работал как root (через sudo). В исходном вопросе упоминается lsof, и это делает трюк точно. Если вы знаете имя процесса или PID, это очень быстро.

найти процесс по имени:

lsof -c processname

найти процессы по PID:

lsof -p 123

(префикс sudo по мере необходимости, например, если вы не являетесь владельцем процесса.)


это работает для некоторых вещей:

sudo fs_usage | grep dev

на /dev/ файлы или аналогичные.


Я использую открытое приложение, которое очень удобно (с фильтрами, выбором диска,...).

вы можете найти его там:http://whatsopen.en.softonic.com/mac.


чистый и простой подход для проверки текущего процесса (то есть в эквиваленте /proc/self/fd в Linux) использовать ls /dev/fd/:

например

$ touch "file"
$ exec 3<>file

$ ls /dev/fd/    

0 1 2 3

поскольку вы спросили: "есть ли какая-либо другая поддержка [чем lsof]?", попробуйте это:

создайте инструмент командной строки, используя API "proc_pidinfo" C, указанный в выбранном ответе на этот вопрос:как программно получить список открытых файловых дескрипторов для данного PID в OS X?

вы можете использовать proc_pidinfo с параметром PROC_PIDLISTFDS для перечисления файлов, используемых данным процессом. Затем вы можете использовать proc_pidfdinfo для каждого файл в свою очередь с параметром PROC_PIDFDVNODEPATHINFO, чтобы получить свой путь.


список открытых файлов на / Volumes/VolumeName:

lsof | grep "/Volumes/VolumeName"