Como posso determinar se um arquivo específico está aberto no Windows? [fechadas]

87

Uma das minhas ferramentas favoritas para Linux é o lsof - um verdadeiro canivete suíço!

Hoje me perguntei quais programas em um sistema WinXP tinham um arquivo específico aberto. Existe algum utilitário equivalente ao lsof? Além disso, o arquivo em questão estava em um compartilhamento de rede, então não tenho certeza se isso complica as coisas.

Daniel Fone
fonte

Respostas:

74

Use o Process Explorer do Sysinternals Suite, a função Find Handle ou DLL permitirá que você pesquise o processo com aquele arquivo aberto.

Jay Hofacker
fonte
Isso realmente responde à pergunta? O Process Explorer permite que você veja quais arquivos estão abertos para um determinado processo / identificador / dll / qualquer que seja, mas esse é o mapeamento reverso. Veja minha resposta stackoverflow.com/questions/15708/… a esta pergunta.
Greg Mattes,
6
Sim. Clique em Find Handle ou Dll (ou pressione Ctrl-F), digite o nome do arquivo que está procurando e você terá uma lista de processos com aquele arquivo aberto.
Jay Hofacker,
Process Explorer agora foi renomeado e agrupado em "Process Monitor".
Matthew McCullough
7
@MatthewMcCullough Alguma referência? Você está incorreto, Process Explorer e Process Monitor são dois utilitários diferentes.
Alois Mahdal
2
O Process Explorer tem uma interface de linha de comando?
Anderson Green
41

O equivalente a lsof -p pidé a saída combinada de sysinternals handle e listdlls, ou seja,

handle -p pid
listdlls -p pid

você pode descobrir pid com sysinternals pslist.

peterh - Reintegrar Monica
fonte
Isso vem com uma instalação padrão do Windows como o Windows 10?
Morten,
10

Experimente o Handle . Filemon e Regmon também são ótimos para tentar descobrir o que o programa duce foo está fazendo em seu sistema.

Slipsec
fonte
@slipsec FileMon e Regmon foram substituídos pelo Process Monitor v3.2 nas versões do Windows a partir do Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 e Windows Vista.
Lucky
7

Um equivalente de lsof poderia ser a saída combinada do identificador e listdlls do Sysinternals , ou seja:

c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
   10: File  (RW-)   C:\Windows
   1C: File  (RW-)   D:\some\locked\path\OpenFile.txt
[...]

c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls

  Base        Size      Version         Path
  0x00400000  0x29000   2.25.0000.0000  D:\opt\SysinternalsSuite\Listdlls.exe
  0x76ed0000  0x180000  6.01.7601.17725  C:\Windows\SysWOW64\ntdll.dll
[...]

c:\SysInternals>listdlls

Infelizmente, você precisa "executar como administrador" para poder usá-los.

Além disso, listdlls e handle não produzem forma semelhante a uma tabela contínua, portanto, a filtragem de nome de arquivo ocultaria PID. findstr /c:pid: /c:<filename>deve chegar muito perto de ambos os utilitários, embora

c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
  188: File  (RW-)   D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]

Aqui podemos ver que gvim.exe é o que está com este arquivo aberto.

Alois Mahdal
fonte
5

Experimente o Unlocker .

O site Unlocker tem um gráfico bacana (role para baixo depois de seguir o link) que mostra uma comparação com outras ferramentas. Obviamente, essas comparações costumam ser tendenciosas, já que normalmente são escritas pelo autor da ferramenta, mas o gráfico pelo menos lista as alternativas para que você possa experimentá-las por si mesmo.

Greg Mattes
fonte
4
O Unlocker lista apenas arquivos bloqueados, não arquivos abertos. A maioria dos softwares do Windows bloqueia a DLL que usa, mas não seus documentos.
Tobias
5

Se o arquivo for um .dll, você poderá usar o aplicativo de linha de comando TaskList para ver quem o abriu:

TaskList /M nameof.dll
Sean
fonte
3

Existe um programa "OpenFiles", parece fazer parte do windows 7. Parece que pode fazer o que quiser. Ele pode listar arquivos abertos por usuários remotos (por meio de compartilhamento de arquivos) e, após chamar "openfiles / Local on" e reiniciar o sistema, deve ser capaz de mostrar os arquivos abertos localmente. O último é dito ter penalidades de desempenho.

anônimo
fonte
1
Vim aqui procurando uma maneira de descobrir quem está me impedindo de excluir uma pasta e evitar uma reinicialização, e acho que o comando que preciso requer uma configuração que ... você adivinhou ... requer uma reinicialização. Quão lindas janelas.
Gus
pessoal, esteja ciente de que o comando openfiles leva muito tempo para ser executado (na ordem de 4 minutos)!
NH.
2

Se você clicar com o botão direito do mouse no ícone "Computador" (ou "Meu Computador") e selecionar "Gerenciar" no menu pop-up, isso o levará ao console de Gerenciamento do Computador.

Lá, em Ferramentas do sistema \ Pastas compartilhadas, você encontrará "Arquivos abertos". Provavelmente, isso é quase o que você deseja, mas se o arquivo estiver em um compartilhamento de rede, você precisará fazer a mesma coisa no servidor em que o arquivo está.

Matt Hamilton
fonte
3
Observe que isso só mostra arquivos compartilhados que são abertos por outros usuários da rede. Não ajuda a localizar arquivos abertos no sistema local. Fazer isso no servidor provavelmente dirá a você qual usuário está com o arquivo aberto, mas não qual programa na máquina desse usuário. O Process Explorer (conforme mencionado por @JayHofacker) funcionou bem para mim.
tomlogic
2

Use o Process Explorer para encontrar o id do processo. Em seguida, use o Handle para descobrir quais arquivos estão abertos.

Por exemplo, lidar com -p

Gosto dessa abordagem porque você está usando utilitários da própria Microsoft.

pushNpop
fonte
se tivéssemos o código-fonte para eles
graywolf
2

Em OpenedFilesView , no menu Opções, há um item de menu denominado "Mostrar arquivos de rede". Talvez com isso habilitado, o utilitário mencionado seja de alguma utilidade.

M8R-qpgep8
fonte