Veja qual processo está usando um arquivo no Mac OS X

93

Eu gostaria de rastrear um arquivo e ver qual processo está tocando nele. Isso é possível? Eu sei que posso ver a lista de processos abertos no monitor de atividades, mas acho que está acontecendo muito rapidamente para que eu veja. A razão para isso é que estou usando uma estrutura e acho que a versão do sistema da estrutura está sendo usada em vez da versão de depuração e gostaria de ver qual processo está tocando nele.

JPC
fonte
1
esta é uma questão de uso melhor perguntou sobre Super User
Michael Dautermann
NOTA: ^^^ É MUITO RELEVANTE, pergunta semelhante - Para sua informação ;-)
Brad Parks

Respostas:

90

lsof irá listar os arquivos abertos, mas pode ser um pouco estranho para toques momentâneos (por exemplo, se o arquivo não for aberto quando o lsof for executado, ele não aparecerá).

Acho que sua melhor aposta seria fseventer.app de fernLightning . É um "nagware" e permite que você observe (graficamente) a API fsevents em tempo real.

Shaun
fonte
39
lsof | grep myfilenametrabalhou para mim. Tenho um arquivo PDF na minha lixeira que o sistema afirma estar em uso. Estranhamente lsofafirma que está em uso, Previewmas Previewnão parece estar em execução (por exemplo, quando eu comando-tab através dos aplicativos em execução), mas Activity Monitormostra que está em execução. Visualização estúpida.
Dave Sag
Isso é perfeito para arquivos temporários (ou seja, arquivos que não são mantidos abertos, mas apenas tocados ao salvar).
Jeronimo Colon III,
Eu tive um problema semelhante hoje com um arquivo em minha Lixeira sendo mantido por um processo de visualização zumbi. Abrir o Preview e encerrá-lo novamente resolveu o problema para mim. Acho que o Preview mantém regularmente os arquivos, embora tenha encerrado. Costumo abrir imagens do Evernote no Preview para recortá-las e, na maioria das vezes - na maioria das vezes - mesmo depois de encerrar o Preview, o Evernote argumenta que a imagem ainda está aberta em outro aplicativo.
Vihung
Parece um problema que estou tendo agora - ainda sem solução. Baixei um arquivo usando o Chrome e, em seguida, movi-o usando o Finder para outra pasta. Ele apareceu cinza, então usei lsof para descobrir quem estava com o arquivo aberto: Finder. Tentei forçar o encerramento do Finder (que o reinicia automaticamente). Isso não funcionou. Tentei fechar meu laptop, imaginando que isso colocaria tudo para dormir e, com sorte, resolveria o problema. Isso também não funcionou. lsof continua a mostrar o Finder como o culpado e continua a aparecer em cinza na IU.
Victor Engel
1
Curiosamente, fechar as janelas do localizador pareceu resolver o problema. No entanto, se eu abrisse uma nova janela de localização e navegasse para a mesma pasta, o problema persistia. Resolvi o problema arrastando o arquivo errôneo para a lixeira (gerando um aviso de que pode haver efeitos indesejáveis ​​no programa que está com o arquivo aberto) e, em seguida, copiando o arquivo novamente.
Victor Engel
95

É simples: sudo fs_usage | grep [path_to_file]

spaceboy.cz
fonte
10
Esta é de longe a melhor resposta aqui.
NuSkooler
fs_usage deve ser executado como root ... não é a melhor solução.
bontoJR 01 de
Isso mostra eventos fs? Se um processo tiver um arquivo aberto, mas não estiver fazendo nada com ele, nada aparecerá aqui. Ou pelo menos parecia ser minha experiência. sudo fs_usage | grep musiclibrarynão mostrou nada, mas sudo lsof | grep musiclibrarymostrou 3 processos acessando meus arquivos de banco de dados da biblioteca musical.
gman
43

Mas passei 2 minutos pesquisando e encontrei sua resposta aqui .

$ lsof | grep [qualquer]

Onde [qualquer] é substituído pelo nome do arquivo que você está procurando. Com isso, você pode ver qual programa está desesperadamente segurando seu arquivo prestes a ser descartado. Assim que você sair desse programa, sua lixeira ficará vazia.

Michael Dautermann
fonte
1
O problema com isso é que tenho que tentar digitar lsof muito rápido. pode ser apenas temporário
JPC
13
lsof -r coloca lsof em modo de repetição
stoutyhk
Faz sentido fazer um grep apenas no caso de o arquivo ter sido liberado.
Ray Hunter
16

A maneira mais rápida é:

$ lsof [path_to_file]

Esta solução não requer a senha de root e retorna o seguinte resultado claro:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
Finder     497  JR7   21r   REG    1,2   246223 33241712 image.jpg
QuickLook 1007  JR7  txt    REG    1,2   246223 33241712 image.jpg
bontoJR
fonte
15

Outra opção é a preguiça . É uma GUI gratuita e de código aberto para LSOF que outros mencionaram.

cavalgada
fonte
1
Uau, essa é uma ferramenta realmente ótima, obrigado por compartilhar! Funcionou perfeitamente para encontrar um processo que perdi a noção.
RayB de
2
Eu tendo a preferir soluções de linha de comando porque são mais portáteis, mas devo admitir que essa é uma ferramenta muito boa! Obrigado pela sugestão.
Formulário de