Como você encontra qual processo está mantendo um arquivo aberto no Windows?


515

Uma coisa que me incomoda no Windows é o antigo erro de violação de compartilhamento . Muitas vezes você não consegue identificar o que está mantendo aberto. Normalmente, é apenas um editor ou explorador apenas apontando para um diretório relevante, mas às vezes eu tive que recorrer à reinicialização da minha máquina.

Alguma sugestão sobre como encontrar o culpado?


12
Você pensaria que, depois de todo esse tempo, o pessoal do Windows nos daria uma maneira de fazer isso facilmente a partir do Explorer. Eu me pergunto por que isso não aconteceu?
Cawflands

6
Acho que o Explorer muitas vezes é o processo problemático que está mantendo um arquivo sem motivo óbvio.
Eddie

Sei que isso não ajuda muito, mas acho que lembrei que esse era um recurso planejado para a próxima versão do Windows após o Vista e o servidor de 2008. ou talvez seja uma coisa do WinFS. não sei onde eu li que ...
Kip

veja minha resposta no superusuário aqui , em resumo O OpenedFilesView ainda funciona em 2019
Vijay

Respostas:


440

Eu tive sucesso com o Sysinternals Process Explorer . Com isso, você pode procurar para descobrir quais processos têm um arquivo aberto e pode usá-lo para fechar os identificadores, se desejar. Obviamente, é mais seguro fechar todo o processo. Tenha cuidado e julgamento.

Para encontrar um arquivo específico, use a opção de menu Find->Find Handle or DLL... Digite parte do caminho para o arquivo. A lista de processos será exibida abaixo.

Se você preferir a linha de comando, o pacote Sysinternals inclui a ferramenta de linha de comando Handle , que lista os identificadores abertos. Alguns exemplos de como usá-lo:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ - encontre todos os arquivos abertos na unidade E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question

17
Você pode fechar a alça, mas lembre-se de que você está puxando o tapete de baixo de um aplicativo; os resultados serão imprevisíveis na melhor das hipóteses.
WaldenL

12
@ Walden: Absolutamente. YMMV. Com o WinXP, muitas vezes o Explorer abre um identificador sem motivo óbvio e se recusa a fechá-lo. Quando isso acontece em um arquivo que você precisa excluir, você pode forçar o fechamento do identificador ou reiniciar. Até agora, tendo feito isso dezenas de vezes, não sofri efeitos negativos. Como em qualquer ferramenta avançada, use com cautela e julgamento.
Eddie

5
Fechar as alças pode fazer com que o aplicativo reutilize a alça em outro arquivo, causando corrupção - veja a resposta de Jeff abaixo: serverfault.com/a/15695/79266 ... muito mais seguro matar o aplicativo que mantém o arquivo aberto, se você não quer reiniciar.
RichVel

14
Para explorador, btw, segure Ctrl-Shift e clique com o botão direito em uma área em branco do menu iniciar, e você vai ter "Exit Explorer" - ps, não é bem a resposta de Jeff ..
Mark Sowul

2
Não ajuda para arquivos não executivos como um arquivo de texto. Preciso saber quem está gravando em um arquivo de log. Qualquer ideia?
Xaqron #

183

Você pode usar o Monitor de recursos para este que vem built-in com o Windows 7, 8 e 10.

  1. Abra o Monitor de Recursos , que pode ser encontrado
    • Ao procurar pelo Monitor de Recursos ou resmon.exe no menu Iniciar, ou
    • Como um botão na guia Desempenho no seu Gerenciador de tarefas
  2. Vá para a guia CPU
  3. Use o campo de pesquisa na seção Alças Associadas
    • Veja a seta azul na captura de tela abaixo

Quando você encontrar o identificador, poderá identificar o processo observando a coluna Imagem e / ou PID.

Você pode tentar fechar o aplicativo como faria normalmente ou, se isso não for possível, basta clicar com o botão direito do mouse no identificador e interromper o processo diretamente a partir daí. Mole-mole!

Captura de tela do Resource Monitor

Copiado da minha resposta original: https://superuser.com/a/643312/62


2
Vale ressaltar que pode ser difícil encontrar esse programa no Windows 8 - uma pesquisa por 'resmon.exe' deve localizá-lo.
Kylotan

4
@Kylotan, Pare de perder tempo pesquisando. Basta executar resmon diretamente do cmd
Pacerier

1
@Pacerier: Nice. Não estou acostumado com as coisas no caminho do Windows.
Kylotan

Isso combina comigo melhor do que 'Handle | FINDSTR' e 'alternativas Unlocker', embora eles também são eficazes
Marcus Vinicius Pompeu

4
Ainda válido no Windows 10 e pode ser encontrado usando o botão "Open Resource Monitor" na guia Gerenciador de tarefas -> Desempenho.
Norman Breau

92

Experimente o comando openfiles .


10
+1 para um comando interno, embora eu pessoalmente use o ProcessExplorer por isso na maioria das vezes.
RBerteig 6/05/2009

Realmente util.
Marko

7
ERRO: O sistema de destino deve estar executando um sistema operacional de 32 bits.
Bozojoe

4
não funciona para 64 OS!

12
Parece estar funcionando para o Windows 2012R2 de 64 bits, mas você precisa habilitar o serviço "abrir rastreamento local" executando openfiles /local one reiniciando. Isso torna esse recurso não muito útil.
Guss

82

Apenas tenha muito cuidado ao fechar alças; é ainda mais perigoso do que você imagina, por causa da reciclagem de identificadores - se você fechar o identificador de arquivo e o programa abrir outra coisa, esse identificador de arquivo original que você fechou poderá ser reutilizado para esse "outro item". E agora adivinhe o que acontece se o programa continuar, pensando que está funcionando no arquivo (cujo identificador você fechou), quando na verdade esse identificador de arquivo agora está apontando para outra coisa.

ver a publicação de Raymond Chen sobre este tópico

Suponha que um serviço de índice de pesquisa tenha um arquivo aberto para indexação, mas tenha ficado temporariamente bloqueado e você queira excluir o arquivo, para que (imprudentemente) force o fechamento do identificador. O serviço de índice de pesquisa abre seu arquivo de log para registrar algumas informações, e o identificador para o arquivo excluído é reciclado como identificador para o arquivo de log. A operação travada finalmente é concluída e o serviço de índice de pesquisa finalmente fecha o identificador que ele havia aberto, mas acaba involuntariamente fechando o identificador do arquivo de log.

O serviço de índice de pesquisa abre outro arquivo, digamos um arquivo de configuração para gravação, para que ele possa atualizar algum estado persistente. O identificador para o arquivo de log é reciclado como o identificador para o arquivo de configuração. O serviço de índice de pesquisa deseja registrar algumas informações e, portanto, grava em seu arquivo de log. Infelizmente, o identificador do arquivo de log foi fechado e o identificador reutilizado para seu arquivo de configuração. As informações registradas vão para o arquivo de configuração, corrompendo-o.

Enquanto isso, outro identificador que você forçou a fechar foi reutilizado como identificador mutex, usado para ajudar a impedir a corrupção de dados. Quando o identificador de arquivo original é fechado, o identificador mutex é fechado e as proteções contra corrupção de dados são perdidas. Quanto mais tempo o serviço for executado, mais corrompidos serão os índices. Eventualmente, alguém percebe que o índice está retornando resultados incorretos. E quando você tenta reiniciar o serviço, ele falha porque seus arquivos de configuração foram corrompidos.

Você relata o problema à empresa que faz o serviço de índice de pesquisa e eles determinam que o índice foi corrompido, o arquivo de log parou misteriosamente de log e o arquivo de configuração foi substituído por lixo. A um técnico pobre é atribuída a tarefa impossível de descobrir por que o serviço corrompe seus índices e arquivos de configuração, sem saber que a origem da corrupção é que você forçou o fechamento de um identificador.


12
aviso importante, isso deve ir mais perto do topo - uma reinicialização é provavelmente melhor que um arquivo corrompido silenciosamente.
RichVel 30/03/12

6
+1 Isso certamente me fará pensar duas vezes sobre forçar as alças fechadas! Parece-me estranho que o Windows reutilize imediatamente o número de um identificador fechado, em vez de continuar a aumentar o número e apenas contornar quando necessário. Isso reduziria ao menos as chances desse problema acontecer.
EM0

1
@RichVel Terminar o processo culpado é provavelmente melhor do que uma reinicialização completa.
Dmitry Grigoryev

@DmitryGrigoryev - bom ponto, e na verdade eu já mencionei isso aqui
RichVel 24/17/17

2
Este é um aviso muito importante, mas não responde à pergunta Como você encontra qual processo está mantendo um arquivo aberto no Windows?
Ploni 26/07

29

Eu usei o Handle com sucesso para encontrar esses processos no passado.


3
Eu uso essa ferramenta o tempo todo. Se não consigo ejetar uma unidade USB, basta digitar "handle H:" (ou qualquer que seja a letra da unidade). O melhor de tudo é que você pode usá-lo para forçar alças fechadas.
4920 Chris Thompson



7

Apenas para esclarecer, é mais provável que isso ocorra com o mau comportamento de aplicativos de terceiros que não usem a chamada da API CreateFile corretamente do que com qualquer coisa no próprio Windows. Talvez seja uma conseqüência do design do CreateFile, mas está feito e não podemos voltar atrás.

Basicamente, ao abrir um arquivo em um programa Windows, você tem a opção de especificar um sinalizador que permita acesso compartilhado. Se você não especificar o sinalizador, o programa terá acesso exclusivo ao arquivo.

Agora, se o Explorer parece ser o culpado aqui, pode ser o caso disso, e que o verdadeiro culpado é algo que instala uma extensão do shell que abre todos os arquivos em uma pasta para seus próprios fins, mas também é entusiasta em fazê-lo, ou que não limpa adequadamente depois de si. O Symantec AV é algo que já vi fazer isso antes, e não ficaria surpreso se outros programas AV também fossem culpados. Os plug-ins de controle de origem também podem estar com defeito.

Portanto, não é realmente uma resposta, mas apenas alguns conselhos para nem sempre culpar o Windows pelo que pode ser um programa de terceiros mal escrito (algo que também pode acontecer em qualquer outro sistema operacional com bloqueio implícito de arquivos, mas qualquer sistema operacional baseado em unix tem acesso compartilhado por padrão).


1
Não vou culpar um aplicativo de terceiros pelo fato de que o meu Windows Explorer sempre bloqueia os arquivos Thumbs.db em seu diretório de trabalho, mas nem sempre o desbloqueia quando alterno o diretório de trabalho. Pelo menos eles são desbloqueados quando eu fechar a janela, não tem que matar todos os exploradores ...
Alexander

@ Darth, você é um profissional de marketing da Microsoft?
Pacerier

6

Em um servidor remoto, quando você está verificando um compartilhamento de rede, algo tão simples quanto o console de Gerenciamento do Computador pode exibir essas informações e fechar o arquivo.


Exatamente, por que existem respostas tão complicadas?
Rohit Gupta

6

Apropos Explorer, mantendo um arquivo aberto: "Quando isso acontece em um arquivo que você precisa excluir, você pode forçar o manuseio fechado ou reiniciar".

Você pode finalizar o Explorer.

Se isso é algo único (o Explorer normalmente não mantém esse arquivo aberto), acho que fazer logoff e fazer logon novamente farão o truque.

Caso contrário, mate o processo do Desktop Explorer e faça o que quiser enquanto estiver ausente. Primeiro, inicie uma cópia do cmd.exe (você precisa de uma interface do usuário para fazer a limpeza pretendida). Verifique se não há Exploradores que não sejam da área de trabalho em execução. Em seguida, mate o último Explorer com, por exemplo, o Gerenciador de tarefas. Faça o que quiser no prompt de comando. Por fim, execute o Explorer no prompt de comando e ele se tornará a área de trabalho.

Eu acho que pode haver algum desagrado residual se alguns programas systray não puderem lidar com o reinício do shell.


1
Isso é muito mais seguro do que fechar o identificador e menos perturbador do que reiniciar. Aplica-se a outros programas também - muitas vezes acho que um programa do Microsoft Office retém bloqueios nos arquivos, mesmo depois de os fechar.
RichVel

5

Os arquivos podem ser bloqueados por processos locais (o unlocker é a ferramenta a ser usada) e pelo acesso a arquivos provenientes de compartilhamentos.

Há uma função interna no Windows que mostra quais arquivos no computador local estão abertos / bloqueados pelo computador remoto (que tem o arquivo aberto por meio de um compartilhamento de arquivo):

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

Lá você pode até fechar o arquivo com força.




2

As respostas acima votadas abrangem situações em que um processo do programa está mantendo o identificador de arquivo aberto, o que (felizmente) é na maioria das vezes - no entanto, em alguns casos (como está ocorrendo neste sistema no momento), o próprio sistema mantém um identificador de arquivo abrir.

Você pode identificar essa situação seguindo as instruções para localizar o processo de retenção de identificador de arquivo com o explorador de processos acima e observando que o nome do processo está listado como 'sistema' ou seguindo as instruções usando o monitor de recursos e observando que nenhuma imagem é mostrada ter um identificador de arquivo aberto no seu arquivo de interesse (embora, obviamente, algo faça como você não pode editar / excluir, etc.).

Se isso acontecer, sua opção (até onde sei) é reiniciar - ou esqueça de fazer qualquer coisa com esse arquivo.


0

Há algum tempo, fiquei ligado ao Exteneded Task Manager pelo blog de Jeremy Zawodny, e é ótimo para rastrear mais informações sobre processos também. +1 para o Process Explorer, como acima, também, especialmente para eliminar processos que o Gerenciador de tarefas padrão não terminará.


0

Existe uma ferramenta FILEMON e mostra arquivos e identificadores abertos. É difícil acompanhar a exibição, se você assistir ao vivo, o faz rapidamente. Mas você pode impedir a exibição ao vivo e assistir a todas as atividades de abertura / gravação de arquivos. Agora de propriedade da Microsoft, mas originalmente da Sysinternals


1
A versão atualizada disso é monitor de processo. Você pode obtê-lo aqui: http://technet.microsoft.com/en-us/sysinternals/bb896645
yitwail
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.