No Windows, os bloqueios de arquivos permanecem depois que um processo foi finalizado via taskkill?

1

Não estamos falando de reinicialização / reinicialização aqui (semelhante a outra pergunta). Essa questão distingue a maneira diferente como o Windows manipula os bloqueios de arquivos existentes em um taskkill versus a maneira como ele responde a um desligamento / reinicialização.

Se eu forçar a matar um programa, os arquivos que ele bloqueou ainda permanecerão bloqueados ou os bloqueios serão liberados quando o processo também morrer?

Por força de morte, quero dizer, como usar o comando 'taskkill' ou 'end process tree' no gerenciador de tarefas.

Para esclarecer ainda mais, não estou falando de um processo deixando um arquivo de bloqueio auxiliar não removido residente, como o MS Word. Estou falando sobre o status de um bloqueio de arquivo exclusivo ou compartilhado real.

O taskkill libera um filelock? Ou o bloqueio permanece até o momento em que uma ação de reinicialização ou de um usuário administrativo é executada no console de gerenciamento do computador?

Aqui está o que eu posso confirmar - matando um processo de 16 bits que coloca um bloqueio exclusivo

Isso está usando um pequeno programa de console que coloca um bloqueio exclusivo em um arquivo no mesmo diretório local. O programa permanece em execução até que o usuário pressione uma tecla e, em seguida, desbloqueie o arquivo. Aqui está o que acontece:

  • Se iniciado no prompt de comando e morto no gerenciador de tarefas, ele libera o bloqueio. O processo para matar é o cmd.exe específico que lançou o programa. Matar libera o bloqueio.

  • Se iniciado clicando e depois morto ao fechar a janela, o bloqueio é liberado.

  • No entanto, se iniciado clicando e depois matando o conhost.exe no gerenciador de tarefas, ele não libera o bloqueio. Nesse caso, também não há cmd.exe porque foi clicado. Portanto, a única maneira de eliminá-lo é através da eliminação do conhost.exe ou do ntvdm.exe em execução. O bloqueio permanece no local até depois da reinicialização.

  • Se iniciado clicando e depois matando o ntvdm.exe no gerenciador de tarefas, ele libera o bloqueio.

  • Em nenhum momento o bloqueio exclusivo impede que o arquivo seja excluído. No entanto, o Windows não permite que o arquivo seja copiado no Explorer enquanto o bloqueio estiver no lugar.

Então, dois comportamentos diferentes, dependendo se a tarefa é iniciada via prompt cmd ou clicando e matando o subsistema conhost ou ntvdm. Naturalmente, matar o subsistema ntvdm.exe também mata qualquer outro processo que esteja sendo solicitado no thread do ntvdm.

    
por Austin Powers 23.05.2015 / 01:48

1 resposta

3

Sim, os bloqueios permanecem, mas você não pode prever quando serão liberados pelo sistema operacional. Consulte LockFile () e LockFileEx () :

If a process terminates with a portion of a file locked or closes a file that has outstanding locks, the locks are unlocked by the operating system. However, the time it takes for the operating system to unlock these locks depends upon available system resources. Therefore, it is recommended that your process explicitly unlock all files it has locked when it terminates. If this is not done, access to these files may be denied if the operating system has not yet unlocked them.

    
por 23.05.2015 / 04:22