Como descobrir que processo está a usar uma unidade no Mac

O Mac não ejeta a sua unidade? Eis como descobrir exatamente que processo a está a bloquear: usando o Monitor de Atividade, o Terminal e um método mais rápido com um clique.

Quando o macOS se recusa a ejetar uma unidade externa, diz-lhe que algo a está a usar, e fica-se por aí. Sem nome, sem pista, sem indício. Descobrir o culpado por conta própria requer alguns passos, mas é perfeitamente possível. Este guia percorre todos os métodos, desde as ferramentas integradas que a Apple disponibiliza até aos comandos do Terminal que revelam o que a interface gráfica esconde.

Porque é que o macOS simplesmente não lhe diz

Isto é uma frustração genuína, não um erro do utilizador. O macOS sempre mostrou o erro de “disco em uso” sem nomear o processo responsável. O sistema operativo sabe que processo mantém uma referência a um ficheiro aberto no volume. Apenas não revela essa informação no Finder nem na janela de ejeção.

O resultado: fecha todas as apps visíveis, nada muda, e a unidade continua sem ejetar. Como explicado no guia de resolução do erro ‘Disco em uso’ do macOS, o bloqueador é muitas vezes um processo em segundo plano (a indexação do Spotlight, o QuickLook a gerar miniaturas ou um daemon de sincronização na nuvem) e não algo que se lembraria de encerrar manualmente.

Método 1: Monitor de Atividade (limitado, mas um ponto de partida)

O Monitor de Atividade é o primeiro sítio onde a maioria das pessoas procura. Não é ideal para esta tarefa específica, mas pode ajudar a restringir as hipóteses.

  1. Abra o Monitor de Atividade (Aplicações → Utilitários → Monitor de Atividade, ou pesquisa no Spotlight).
  2. Clique no separador Disco no topo.
  3. Ordene por Bytes lidos ou Bytes escritos para ver que processos estão ativamente a ler ou a escrever.

O problema: o Monitor de Atividade mostra a atividade do disco em todos os volumes, não apenas na sua unidade externa. Um processo no topo da lista pode estar a escrever no seu SSD interno, e não na sua unidade USB. Aqui não consegue filtrar por volume.

Ainda assim, se vir algo inesperado (um daemon de cópia de segurança, uma app de multimédia, um serviço de sincronização), vale a pena encerrá-lo e tentar ejetar novamente.

Método 2: Terminal com lsof (a abordagem fiável)

lsof significa “list open files” (listar ficheiros abertos) e, no macOS, cada volume montado é um caminho de ficheiro. Este comando mostra-lhe todos os processos com uma referência aberta a uma unidade específica.

Encontrar o ponto de montagem da sua unidade

Primeiro, confirme o nome exato da sua unidade tal como o macOS a vê:

ls /Volumes/

Isto lista todos os volumes montados. A sua unidade externa aparecerá aqui. Anote o nome exato, incluindo maiúsculas e espaços.

Executar o lsof sobre o volume

lsof /Volumes/NomeDaSuaUnidade

Substitua NomeDaSuaUnidade pelo nome real do volume. O resultado lista todos os processos com um ficheiro aberto nesse volume, incluindo:

  • COMMAND: o nome do processo
  • PID: o identificador do processo
  • USER: a conta de utilizador que o está a executar
  • NAME: o caminho específico do ficheiro a ser acedido

O que vai normalmente ver

Culpados comuns que aparecem no resultado do lsof:

  • mds ou mds_stores: indexação do Spotlight
  • QuickLookUIService: geração de miniaturas do QuickLook
  • cloudd, bird ou com.apple.iCloudDrive: sincronização do iCloud
  • backupd: Time Machine
  • Finder: janelas do Finder abertas a apontar para a unidade
  • Apps de multimédia como o Final Cut Pro ou o Premiere com ficheiros de projeto abertos

Dica: Se o lsof não devolver qualquer resultado, tente executá-lo com sudo para obter permissões elevadas: sudo lsof /Volumes/NomeDaSuaUnidade. Alguns processos do sistema só aparecem com acesso de root.

Para uma análise mais aprofundada do que o lsof consegue fazer (incluindo filtrar por PID e terminar processos diretamente a partir da linha de comandos), veja O comando lsof explicado para utilizadores de Mac.

Encerrar o processo a partir do Terminal

Assim que tiver o PID, pode encerrar o processo:

kill -15 <PID>

Se não responder, escale para um encerramento forçado:

kill -9 <PID>

Depois tente ejetar a unidade novamente.

Método 3: fuser como alternativa

O fuser é outro comando do Terminal que indica que processos estão a usar um ficheiro ou um sistema de ficheiros. É menos detalhado do que o lsof, mas mais rápido de ler:

sudo fuser /Volumes/NomeDaSuaUnidade

O resultado é apenas uma lista de PID. Para obter os nomes dos processos a par deles, combine-o com o ps:

sudo fuser /Volumes/NomeDaSuaUnidade | xargs ps -p

Isto é útil quando quer uma resposta rápida sem analisar uma longa tabela do lsof.

Processos bloqueadores comuns e o que fazer quanto a eles

Spotlight (mds, mds_stores)

O Spotlight indexa novas unidades automaticamente. Se ligar uma unidade grande, a indexação pode demorar minutos ou horas. Pode pará-la temporariamente abrindo Definições do Sistema → Siri e Spotlight → Privacidade do Spotlight e adicionando a unidade à lista de exclusões. Em alternativa, encerre o mds através do Terminal. O Spotlight reinicia por conta própria mais tarde.

QuickLook (QuickLookUIService)

O QuickLook gera miniaturas de pré-visualização quando percorre uma unidade no Finder. Pode manter referências a ficheiros abertas mesmo depois de ter fechado a janela do Finder. O QuickLook está a manter a sua unidade refém aborda isto em detalhe: a solução rápida é encerrar o processo do QuickLook através do Terminal ou de uma ferramenta dedicada.

iCloud e Dropbox

Os serviços de sincronização tratam as unidades externas como qualquer outra pasta se tiver guardado dados de sincronização nelas. Mantêm os ficheiros abertos durante o carregamento ou a resolução de conflitos. Como impedir que o iCloud e o Dropbox bloqueiem a ejeção de unidades explica como pausar a sincronização antes de ejetar.

Finder

O próprio Finder pode bloquear a ejeção se tiver uma janela aberta a mostrar o conteúdo da unidade, ou se estiver uma cópia de ficheiros em curso. Feche todas as janelas do Finder que apontam para a unidade, ou encerre e reinicie o Finder a partir do menu Apple.

Apps de multimédia e criativas

O Final Cut Pro, o Premiere, o Logic e apps semelhantes mantêm os ficheiros de projeto abertos enquanto o projeto estiver carregado. Feche o projeto (não apenas a janela da app) antes de ejetar. Veja Usar unidades externas com o Final Cut Pro sem problemas de ejeção para conselhos específicos de fluxo de trabalho.

Porque é que o Terminal é inconveniente para uso regular

A abordagem com lsof funciona, mas tem atrito. Precisa de:

  1. Abrir o Terminal
  2. Saber o nome exato do volume
  3. Analisar resultados pouco familiares
  4. Procurar PID e nomes de processos
  5. Executar um comando kill separado
  6. Voltar ao Finder para ejetar

Se é programador ou administrador de sistemas que vive no Terminal, tudo bem. Se é um editor de vídeo ou um utilizador comum de Mac que só quer desligar uma unidade em segurança, é muita cerimónia para uma tarefa que devia demorar dois segundos.

Aviso: Evite arrancar a unidade sem a ejetar, mesmo que esteja impaciente: pode corromper o sistema de ficheiros, sobretudo em unidades formatadas como exFAT ou NTFS. Os riscos são reais e estão detalhados em Desligar uma unidade externa sem ejetar pode danificá-la?

A forma mais rápida: ver o processo bloqueador num relance

O Ejecta faz exatamente o que o lsof faz, mas revela o resultado na sua barra de menus no momento em que precisa dele. Clique no ícone, veja que processo está a reter a sua unidade, clique para o encerrar e ejete, sem Terminal, sem análise, sem alternar entre janelas.

Lida com os casos em que as pessoas mais tropeçam: o Spotlight a correr em segundo plano, o QuickLook a reter uma cache de miniaturas, um daemon de sincronização que não larga. O nome do processo está ali mesmo, legível, com uma única ação para o resolver.

Referência rápida: que método usar

Situação Melhor método
Quer perceber o que se está a passar lsof no Terminal
Precisa de uma resposta rápida e pontual fuser no Terminal
Faz isto regularmente e não quer atrito App Ejecta na barra de menus
Está a resolver um processo de sistema teimoso sudo lsof + kill

Se está regularmente a embater na parede do “disco em uso”, descarregue o Ejecta e coloque o nome do processo bloqueador a um clique de distância, sem Terminal.