
Não estamos falando de reinicialização/reinicialização aqui (semelhante a outra pergunta). Esta questão distingue a maneira diferente como o Windows lida com bloqueios de arquivos existentes em um taskkill versus a maneira como ele responde a um desligamento/reinicialização.
Se euforçar matarum programa, os arquivos que ele bloqueou ainda permanecerão bloqueados ou os bloqueios também serão liberados quando o processo morrer?
Por forçar a eliminação, 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 que deixa um arquivo de bloqueio auxiliar residente não removido, como faz o MS Word. Estou falando sobre o status de um bloqueio de arquivo exclusivo ou compartilhado.
Taskkill libera um filelock? Ou o bloqueio permanece ativo até que uma reinicialização ou uma ação do usuário administrador seja executada no console de gerenciamento do computador?
Aqui está o que posso confirmar: eliminar 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 então desbloqueará o arquivo. Aqui está o que acontece:
Se iniciado no prompt de comando e eliminado no gerenciador de tarefas, ele libera o bloqueio. O processo para eliminar é o cmd.exe específico que iniciou o programa. Matá-lo libera a fechadura.
Se iniciado clicando e encerrado fechando a janela, o bloqueio será liberado.
No entanto, se iniciado clicando e eliminando 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 é eliminando o conhost.exe ou ntvdm.exe em que ele está sendo executado. O bloqueio permanece no lugar até depois da reinicialização.
Se iniciado clicando e eliminando 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 ativado.
Portanto, dois comportamentos diferentes dependendo se a tarefa é iniciada via prompt cmd ou clicando e eliminando o subsistema conhost ou ntvdm. Obviamente, eliminar o subsistema ntvdm.exe também elimina quaisquer outros processos executados no thread ntvdm.
Responder1
Sim, os bloqueios permanecem, mas você não pode prever quando eles serão liberados pelo sistema operacional. VerArquivo de bloqueio()eLockFileEx():
Se um processo terminar com uma parte de um arquivo bloqueada ou fechar um arquivo que possui bloqueios pendentes, os bloqueios serão desbloqueados pelo sistema operacional. No entanto, o tempo que o sistema operacional leva para desbloquear esses bloqueios depende dos recursos disponíveis do sistema. Portanto, é recomendado que seu processo desbloqueie explicitamente todos os arquivos que ele bloqueou ao terminar. Caso isso não seja feito, o acesso a esses arquivos poderá ser negado caso o sistema operacional ainda não os tenha desbloqueado.