it-swarm-pt.tech

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

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

Alguma sugestão sobre como encontrar o culpado?

538
cletus

Eu tive sucesso com SysinternalsProcess Explorer . Com isso, você pode pesquisar para encontrar 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 Sysinternals Suite inclui a ferramenta de linha de comando Identificador , que lista 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
455
Eddie

Você pode usar o Monitor de Recursos para isso, que vem interno com Windows 7, 8 e 10.

  1. Abra Monitor de Recursos , que pode ser encontrado
    • Pesquisando 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!

Resource Monitor screenshot

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

195
Svish

Experimente o comando openfiles .

93
John Fouhy

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 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 algum 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.

83
Mark Sowul

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

29
Greg Hewgill

O Lockhunter ( http://lockhunter.com/ ) funciona em sistemas de 32 e 64 bits.

11
Scoregraphic

Apenas para esclarecer, é mais provável que isso resulte do mau comportamento de aplicativos de terceiros que não usem a chamada da API CreateFile corretamente, do que em qualquer coisa do 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 isso não limpa adequadamente depois de si. O Symantec AV é algo que eu já vi fazer isso antes, e não ficaria surpreso se outros programas antivírus 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).

7
Maximus Minimus

Who Lock Me funciona bem e mantém as pessoas divertidas com o nome!

7
Generic Error

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), eu acho que fazer logoff e logon novamente fará 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 a reinicialização do Shell.

6
dave

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.

6
K. Brian Kelley

Os arquivos podem ser bloqueados por processos locais ( nlocker é 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.

5
Dirk Paessler

Com Process Hacker , você pode identificar quais processos estão mantendo seus arquivos facilmente:

Find Handles or DLLs

4
Ivan Kochurkin

Também há a exibição de arquivos abertos da NirSoft .

4
Christopher Galpin

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 aberto.

Você pode identificar essa situação seguindo as instruções para localizar o processo de retenção de identificador de arquivo com o Process Explorer 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 o que você não pode editar/excluir, etc.).

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

2
Blair

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

0
user44304

Fiquei ligado no Exteneded Task Manager há algum tempo no 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
nedm