2014-01-07 5 views
28

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

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

Спасибо.

+0

'lsof' - презумптивный ответ на вопрос в самом названии. Не могли бы вы назвать более конкретным название? – benc

ответ

29

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

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

+0

Он также работает для maverick – olegtaranenko

2

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

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

3

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

sudo fs_usage | grep dev 

для /dev/ файлов или аналогичный.

22

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

Поиск в процессы по названию:

lsof -c processname 

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

lsof -p 123 

0

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

, например.

$ touch "file" 
$ exec 3<>file 

$ ls /dev/fd/  

0 1 2 3 
+0

Есть ли способ получить доступ к этому процессу, отличному от текущего? –

+0

@CharlesDuffy - я точно не уверен; Я пересмотрел свой ответ. –

0

Поскольку вы спросили «? Есть ли другая поддержка [чем Lsof] доступны», попробуйте следующее:

Создать инструмент командной строки с помощью «proc_pidinfo» C API, на который ссылается выбранный ответ этот вопрос: How can I programmatically get the list of open file descriptors for a given PID on OS X?

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