Como você acha que processo está mantendo um arquivo aberto no Windows?

484

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 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?

    
por cletus 01.05.2009 / 02:47

16 respostas

419

Eu tive sucesso com Sysinternals Process Explorer . Com isso, você pode pesquisar para descobrir que processo (es) tem um arquivo aberto e usá-lo para fechar a (s) alça (s), se desejar. Claro, é mais seguro fechar todo o processo. Tenha cautela 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 aparecerá abaixo.

Se você preferir a linha de comando, a suíte Sysinternals inclui a ferramenta de linha de comando Handle , que lista as opções abertas alças. Alguns exemplos sobre como usá-lo:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ - localiza todos os arquivos abertos a partir da unidade E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question
por 01.05.2009 / 03:03
150

Para o Windows 7, Windows 8 e Windows 10, você pode usar o Monitor de Recursos para isso.

  1. Abra Monitor de recursos , que pode ser encontrado
    • Pesquisando resmon.exe no menu Iniciar ou
    • Como um botão na guia Desempenho no Gerenciador de tarefas
  2. Marque a caixa de seleção ao lado do título Imagem na seção Processos (os processos verificados exibirão suas identificações de arquivo abaixo).
  3. Use o campo de pesquisa na seção Associated Handles na guia CPU
    • Apontado pela seta azul na captura de tela abaixo

Caso não seja óbvio, quando você encontrar o identificador, poderá identificar o processo observando a coluna Imagem e / ou PID.

Você pode fechar o aplicativo se conseguir fazer isso ou apenas clicar com o botão direito do mouse na linha e terá a opção de eliminar o processo ali mesmo. Fácil peasy!

Copiadodaminharespostaoriginal: link

    
por 10.09.2013 / 13:48
83

Experimente o comando openfiles .

    
por 01.05.2009 / 03:18
77

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

veja o post de Raymond Chen sobre esse assunto

Suppose a search index service has a file open for indexing but has gotten stuck temporarily and you want to delete the file, so you (unwisely) force the handle closed. The search index service opens its log file in order to record some information, and the handle to the deleted file is recycled as the handle to the log file. The stuck operation finally completes, and the search index service finally gets around to closing that handle it had open, but it ends up unwittingly closing the log file handle.

The search index service opens another file, say a configuration file for writing so it can update some persistent state. The handle for the log file gets recycled as the handle for the configuration file. The search index service wants to log some information, so it writes to its log file. Unfortunately, the log file handle was closed and the handle reused for its configuration file. The logged information goes into the configuration file, corrupting it.

Meanwhile, another handle you forced closed was reused as a mutex handle, which is used to help prevent data from being corrupted. When the original file handle is closed, the mutex handle is closed and the protections against data corruption are lost. The longer the service runs, the more corrupted its indexes become. Eventually, somebody notices the index is returning incorrect results. And when you try to restart the service, it fails because its configuration files have been corrupted.

You report the problem to the company that makes the search index service and they determine that the index has been corrupted, the log file has mysteriously stopped logging, and the configuration file was overwritten with garbage. Some poor technician is assigned the hopeless task of figuring out why the service corrupts its indexes and configuration files, unaware that the source of the corruption is that you forced a handle closed.

    
por 30.05.2009 / 19:04
27

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

    
por 01.05.2009 / 02:52
7

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

    
por 06.05.2009 / 02:43
7

Só para esclarecer, é mais provável que isso seja resultado de um mau comportamento dos aplicativos de terceiros que não usam a chamada da API CreateFile corretamente, para ser algo no próprio Windows. Talvez seja uma consequência do design de CreateFile, mas pronto e não podemos voltar atrás.

Basicamente, ao abrir um arquivo em um programa do 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 que isso seja apenas superficial, e que o verdadeiro culpado seja algo que instale uma extensão de shell que abra todos os arquivos em uma pasta para seus próprios propósitos, mas ou é muito entusiasta ao fazê-lo, ou que não se limpa adequadamente depois de si mesmo. O Symantec AV é algo que já vi antes, e não ficaria surpreso se outros programas antivírus também fossem os culpados. Os plug-ins de controle de origem também podem ter falhas.

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 que tenha bloqueio de arquivo implícito, mas qualquer sistema operacional baseado em UNIX acesso compartilhado por padrão).

    
por 12.10.2009 / 16:27
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.

    
por 01.05.2009 / 03:01
6

Apropos Explorer mantendo um arquivo aberto: "Quando isso acontece em um arquivo que você precisa excluir, você tem a opção de forçar o identificador fechado ou reinicializar."

Você pode acabar com o Explorer.

Se isso é uma coisa de uma só vez (o Explorer normalmente não mantém esse arquivo aberto), então eu acho que fazer logoff e fazer login novamente fará o truque.

Caso contrário, mate o processo do Desktop Explorer e faça o que quiser enquanto estiver fora. Primeiro inicie uma cópia do cmd.exe (você precisa de uma interface do usuário para fazer a limpeza pretendida). Certifique-se de que não há nenhum Explorador não-desktop 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. Finalmente, 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.

    
por 03.06.2009 / 16:01
6

O Lockhunter ( link ) funciona em sistemas de 32 e 64 bits.

    
por 12.10.2009 / 15:06
4

Há também a Visão dos arquivos abertos do NirSoft.

    
por 01.05.2009 / 04:12
4

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

Existe uma função incorporada 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 arquivos):

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

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

    
por 12.10.2009 / 14:53
3

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

    
por 13.10.2016 / 01:07
2

As respostas acima votadas abrangem situações em que um processo de 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 arquivos aberto.

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

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

    
por 16.05.2017 / 02:51
0

Liguei para o Exteneded Task Manager há algum tempo atrás pelo blog de Jeremy Zawodny, e é ótimo para acompanhamento mais informações sobre processos também. 1 para o Process Explorer como acima, também, especialmente para matar processos que o Gerenciador de Tarefas padrão não terminará.

    
por 16.05.2009 / 22:16
0

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

    
por 27.05.2010 / 18:15