Подтвердить что ты не робот

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

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

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

Спасибо.

4b9b3361

Ответ 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, чтобы получить свой путь.