O comando lsof explicado para usuários de Mac
Domine o comando lsof para descobrir quais processos têm arquivos abertos no seu Mac. Um guia para desenvolvedores e usuários avançados.
Seu disco externo não ejeta. O macOS exibe a mensagem enlouquecedoramente vaga de que “um ou mais programas podem estar em uso”. Quais programas? Ele não diz. É aqui que entra o lsof.
O nome significa “list open files” (listar arquivos abertos) e ele faz exatamente isso. Em sistemas baseados em Unix, como o macOS, quase tudo é tratado como um arquivo, incluindo conexões de rede, dispositivos e volumes de disco. Quando você não consegue ejetar um disco, o lsof diz precisamente qual processo o está mantendo como refém.
Sintaxe básica
A maneira mais simples de usar o lsof para problemas de ejeção é:
lsof /Volumes/NomeDoSeuDisco
Substitua “NomeDoSeuDisco” pelo nome real do seu disco. Se o nome tiver espaços, envolva todo o caminho em aspas:
lsof "/Volumes/Meu Disco de Backup"
Isso retorna uma lista de cada processo que possui um handle de arquivo aberto naquele volume. Cada linha mostra o nome do processo, seu ID (PID), o usuário que o executa e informações sobre o arquivo específico que está sendo acessado.
Lendo a saída
Uma saída típica do lsof se parece com isto:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mds_store 1234 root 4r REG 1,12 524288 ... /Volumes/External/.Spotlight-V100/...
Finder 5678 voce 3r DIR 1,12 1024 ... /Volumes/External
As colunas que mais importam são COMMAND (o nome do processo), PID (ID do processo que você usaria para encerrá-lo) e NAME (o caminho real do arquivo sendo acessado).
FD descreve como o arquivo foi aberto: r para leitura, w para gravação, u para ambas. Isso não indica atividade atual nem prova que o volume não tem gravações pendentes.
Descobrindo o que está bloqueando seu disco
Para problemas de ejeção especificamente, você geralmente só precisa saber quais nomes de processos aparecem. Culpados comuns incluem mds e mds_stores (indexação do Spotlight), Finder, QuickLookUIService (geração de miniaturas) e fsevents (observador do sistema de arquivos).
Se você vir muita saída e quiser filtrá-la, pode usar o grep:
lsof /Volumes/NomeDoSeuDisco | grep -v "^COMMAND"
Isso remove a linha de cabeçalho para que você veja apenas os processos reais. Se quiser apenas os nomes exclusivos dos processos:
lsof /Volumes/NomeDoSeuDisco | awk '{print $1}' | sort -u
Flags úteis
A flag -c filtra pelo nome do comando. Se você suspeitar que o Spotlight é o problema:
lsof -a -c mds /Volumes/NomeDoSeuDisco
Isso mostra apenas processos cujos nomes começam com “mds”.
A flag +D lista recursivamente todos os arquivos abertos em um diretório:
lsof +D /Volumes/NomeDoSeuDisco
Isso é mais completo que a sintaxe básica, mas pode ser lento em discos grandes com muitos arquivos.
Para ver quais processos um usuário específico tem aberto no disco:
lsof -a -u seuusuário /Volumes/NomeDoSeuDisco
Usando o lsof sem sudo
Por padrão, o lsof mostra apenas os processos pertencentes à sua conta de usuário. Processos do sistema executados pelo root (como o mds do Spotlight) não aparecerão a menos que você execute o lsof com sudo:
sudo lsof /Volumes/NomeDoSeuDisco
Você precisará digitar sua senha. Para solucionar problemas de ejeção, usar o sudo é quase sempre necessário, já que os processos do sistema são frequentemente os bloqueadores.
Encerrando o processo de bloqueio
Salve seu trabalho, termine cópias e backups e encerre os apps normalmente antes de tentar ejetar de novo. Forçar o encerramento ou a ejeção pode causar perda de dados; Ejecta não certifica a segurança das gravações.
kill 1234
Substitua 1234 pelo PID real. Se isso não funcionar, você pode forçar:
kill -9 1234
Os nomes dos processos do Spotlight não provam acesso somente de leitura. Não force o encerramento de mds ou mds_stores para liberar um disco. Espere, feche seus apps e tente uma ejeção normal. Ejecta identifica esses processos, mas não oferece encerramento comum de processos do sistema. Se o disco continuar bloqueado, salve tudo e desligue completamente o Mac antes de desconectar.
Para aplicativos que você possui (como uma janela do Terminal com um shell parado no diretório do disco), é mais limpo fechar o aplicativo normalmente ou navegar para fora do disco antes de tentar ejetar.
Cenários comuns
Terminal com diretório atual no disco: Se você deu cd em uma pasta no seu disco externo, esse processo de shell manterá o disco aberto. Ou mude para outro lugar (cd ~) ou feche a janela do Terminal.
Janelas do Finder: Se o Finder tiver uma janela aberta para o disco, ou mesmo se estiver com o disco selecionado na barra lateral, ele pode impedir a ejeção. Feche quaisquer janelas do Finder que mostrem o conteúdo do disco.
Os nomes dos processos do Spotlight não provam acesso somente de leitura. Não force o encerramento de mds ou mds_stores para liberar um disco. Espere, feche seus apps e tente uma ejeção normal. Ejecta identifica esses processos, mas não oferece encerramento comum de processos do sistema. Se o disco continuar bloqueado, salve tudo e desligue completamente o Mac antes de desconectar.
Apps em segundo plano com arquivos abertos: Alguns aplicativos mantêm referências a arquivos recentes mesmo depois de você ter fechado os documentos. Aplicativos criativos como Photoshop ou editores de vídeo são infratores comuns. Encerrar o aplicativo inteiramente geralmente libera os arquivos.
Além da linha de comando
Se você não se sente confortável com o Terminal ou não quer decifrar a saída do lsof toda vez que precisar desconectar um disco, existem opções gráficas.
O Monitor de Atividade pode mostrar arquivos abertos para um processo específico, mas você já precisa saber qual processo inspecionar. Ele não responde facilmente a “o que está usando este disco?”.
Ejecta: Ejecta oferece diagnóstico gratuito de discos sem teste por tempo limitado. A licença paga libera encerramento e ejeção para apps compatíveis, Ejetar Tudo e controles do Time Machine. Processos do sistema podem exigir espera, autorização ou desligamento. Salve o trabalho e termine as transferências primeiro.
A linha de comando é poderosa para quem a prefere, mas não deveria ser obrigatória para algo tão simples quanto desconectar um disco.
Ejecta oferece diagnóstico gratuito de discos sem teste por tempo limitado. A licença paga libera encerramento e ejeção para apps compatíveis, Ejetar Tudo e controles do Time Machine. Processos do sistema podem exigir espera, autorização ou desligamento. Salve o trabalho e termine as transferências primeiro.
Comprar agora -Artigos relacionados
diskutil eject: como ejetar discos pelo Terminal do Mac
Use diskutil eject /Volumes/Nome para ejetar discos pelo Terminal do Mac. Guia completo: listar discos, forçar …
Como corrigir 'Disco não foi ejetado corretamente' no Mac
Saiba por que o macOS mostra o aviso 'disco não foi ejetado corretamente' e como ejetar com segurança seus …
Como ejetar discos externos com segurança no macOS Sequoia e Sonoma
A Apple mudou o funcionamento da ejeção de discos nas versões recentes do macOS. Veja o que há de diferente no …
APFS vs exFAT: qual formato escolher para o seu disco externo no Mac
Escolher o sistema de arquivos correto para seu disco externo afeta tudo, desde o desempenho até a segurança …