Обнаружение файла, используемого другим процессом - PullRequest
2 голосов
/ 27 декабря 2011

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 06 ноября 2012

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

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

1 голос
/ 27 декабря 2011

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

lsof -Fc path/to/thefile

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

...