Обнаружить файл, используемый другим процессом

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

Я использую, чтобы открыть файл для записи, и если это не удалось, скорее всего, другой процесс занят доступом к нему.

К сожалению, этот трюк (использование C OPEN с эксклюзивной блокировкой для записи) не работает на моем Mac. Пока мой curl в терминале все еще пишет, моя проверка -fileBusy() не проходит.

Вызов fcnt для fd с F_GETLK также не выявляет никакой блокировки.

Есть ли у меня шанс определить, используется ли файл другим процессом?

Ps> прослушивание fsevents невозможно, потому что мое приложение запускается после того, как оно создано другим приложением/процессом.


person Ger Teunis    schedule 27.12.2011    source источник


Ответы (2)


Apple подтвердила по электронной почте, что решение, описанное в приведенной ниже ссылке, является действительным и не считается частным API.

Дополнительная информация: http://lists.apple.com/archives/cocoa-dev/2010/May/msg01455.html

person Ger Teunis    schedule 06.11.2012
comment
Apple не перенаправляет HTTP на HTTPS, поэтому ссылка в ответе теперь — lists.apple.com/archives/cocoa-dev/2010/May/msg01455.html Взрыв из прошлого, чтобы увидеть URL-адрес домена Apple без активированного SSL. - person Chris; 23.02.2021

Вы можете попробовать выполнить следующую команду оболочки с помощью NSTask:

lsof -Fc path/to/thefile

Это даст вам идентификатор процесса и имя любого процесса (процессов), в котором открыт файл.

person Andrew Madsen    schedule 27.12.2011
comment
Хорошее предложение. Нет доступного API c для lsof? Запуск задач будет работать, но по какой-то причине меня бросает в дрожь. - person Ger Teunis; 28.12.2011
comment
Я не знаю ни одной функции C POSIX API, которая выполняла бы то же самое. Я согласен, что запуск NSTasks обычно не является моим любимым способом делать что-то, но пока я не знаю альтернативы в этом случае. Я хотел бы узнать об одном! - person Andrew Madsen; 28.12.2011
comment
Я нашел больше информации о решении, которое может использовать частный API: web.archiveorange.com/archive/ v/SEb6ahosyxznFKzz63G1 Я все еще ищу лучшее решение. - person Ger Teunis; 28.12.2011
comment
lsof не работает в песочнице... поэтому меня интересует другой метод... но ссылки ведут на Шекспира ^^ - person Axel Zehden; 30.06.2015