Если ваш Mac сообщает, что файл используется, или не позволяет его переместить, сначала проверьте программы, в которых он может быть открыт. Для точного ответа воспользуйтесь встроенной командой Терминала lsof с полным путем к файлу; ее вывод поможет определить процесс, удерживающий открытый дескриптор. Затем закройте эту программу обычным способом и повторите операцию с файлом. В macOS нет специальной кнопки в Finder, которая всегда указывает занявшую файл программу.

Сначала проверьте, действительно ли файл открыт

Apple рекомендует убедиться, что объект не открыт в другой программе, если его не удается переместить или скопировать. Проверьте наиболее вероятные приложения — например, текстовый редактор, программу для просмотра изображений, медиаплеер или окно предварительного просмотра — и закройте файл внутри программы. Предварительно сохраните все изменения. Если на файле отображается значок замка, это может быть отдельная настройка защиты документа; открытый файл и заблокированный файл — это разные проблемы. В руководстве Apple по перемещению и копированию описаны обе эти проверки.

Предупреждение Finder иногда может указывать имя программы, но может лишь сообщить о том, что объект используется. Мониторинг системы отображает список запущенных программ и процессов, а также отмечает зависшие процессы, однако он не предназначен для поиска процесса, занявшего конкретный файл. Используйте его для управления процессом уже после того, как у вас появятся основания подозревать именно его, а не пытайтесь угадать на основе потребления ресурсов процессора или памяти.

Определение процесса с помощью Терминала

Команда lsof расшифровывается как «list open files» (список открытых файлов). Ее возможности включают поиск процессов, использующих определенный файл, и она поддерживается в macOS. В документации проекта lsof приводится базовый синтаксис: lsof /path/to/file.

  1. В Finder найдите файл и выберите Файл > Свойства (File > Get Info), чтобы уточнить его имя и расположение. Составьте полный путь, объединив путь к папке и имя файла. Пути чувствительны к регистру, если это предусмотрено файловой системой диска; пробелы в пути допустимы, если весь путь заключен в кавычки.

  2. Откройте Терминал из папки «Программы» > «Утилиты», затем выполните следующую команду, заменив пример пути на реальный:

lsof "/Users/yourname/Documents/Project Notes/report.pdf"
  1. Изучите результат. Столбец COMMAND содержит имя процесса или программы, а PID — его идентификатор (PID). В столбце NAME должен отображаться запрошенный путь к файлу. Если отображается несколько строк или процессов, обратите внимание на все совпавшие имена: файл может быть открыт более чем одним процессом. Имя процесса может отличаться от привычного названия программы, поэтому перед завершением найдите это точное имя в Мониторинге системы.

Команда сообщает только о тех дескрипторах, к которым у нее есть доступ для проверки. Если совпадающие строки не найдены, возможно, программа уже освободила файл, путь указан неверно или macOS не позволяет вашей учетной записи проверять соответствующий процесс. Проверьте путь и повторите попытку, пока предупреждение активно. Если вы понимаете принцип работы команды и вам требуется проверить процесс другого пользователя, команда sudo lsof "/full/path/to/file" может запросить пароль администратора; повышенные привилегии открывают более широкие возможности проверки, но использовать их следует только для этого режима чтения. Документация lsof также предупреждает, что команда может пропустить файлы при изменении состояния процессов. Пустой результат не является доказательством того, что ни одна программа никогда не использовала файл.

Безопасное завершение найденной программы

Сначала сохраните результаты работы и воспользуйтесь стандартной командой программы Завершить (Quit). Если она не отвечает, откройте Мониторинг системы, найдите процесс по имени, выделите его и нажмите кнопку «Остановить». Попробуйте выбрать вариант Завершить (Quit) перед тем, как применять Завершить принудительно (Force Quit). Apple предупреждает, что принудительное завершение прекращает работу процесса немедленно: несохраненные данные могут быть потеряны, а в других программах, зависящих от этого процесса, могут возникнуть сбои. Некоторые процессы относятся к macOS или обеспечивают работу других приложений, поэтому не завершайте незнакомый системный процесс принудительно только из-за того, что он появился в выводе команды. В инструкциях Apple по Мониторингу системы разъясняется эта разница и описано, как просматривать процессы в виде иерархии.

После завершения программы, которая предположительно удерживала файл, снова выполните lsof для того же пути. Если соответствующий процесс исчез, попробуйте снова переместить, скопировать или удалить файл. Если он остался, проверьте другие совпавшие имена процессов и закройте их файлы в штатном режиме, прежде чем переходить к более радикальным мерам.

Если программы не найдены

Отсутствие результата не доказывает, что проблема вызвана блокировкой программой. Убедитесь, что вы запрашиваете точный путь к исходному файлу, затем рассмотрите другие причины, описанные Apple: заблокированный объект, нехватка места на диске, права доступа к папке назначения или формат внешнего накопителя, недоступный для записи в macOS. При работе с сетевыми или внешними хранилищами на операцию также могут влиять проблемы с подключением или состояние тома. Перезагрузка может сбросить зависший дескриптор, однако предварительно сохраните данные и прибегайте к этому шагу только после проверки более простых причин. Инструкции Apple по устранению неполадок при перемещении или копировании файлов рассматривают несколько таких альтернативных вариантов.

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

Источники