Получить список открытых файлов (дескрипторов) в 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
по мере необходимости, например, если вы не являетесь владельцем процесса.)
Я использую открытое приложение, которое очень удобно (с фильтрами, выбором диска,...).
вы можете найти его там: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, чтобы получить свой путь.