Мы не говорим о перезагрузке / перезагрузке здесь (похоже на другой вопрос). Этот вопрос отличает способ, которым Windows обрабатывает существующие блокировки файлов на TaskKill, и то, как он реагирует на завершение работы / перезагрузку.
Если я принудительно убью программу, останутся ли заблокированные файлы по-прежнему заблокированными или блокировки снимаются, когда процесс тоже умирает?
Под принудительным уничтожением я подразумеваю, например, использование команды taskkill или дерева конечных процессов в taskmanager.
Для дальнейшего пояснения, я не говорю о процессе, оставляющем резидентный неснятый файл вспомогательной блокировки, такой как MS Word. Я говорю о статусе фактической монопольной или общей блокировки файлов.
Taskkill освобождает блокировку файла? Или блокировка сохраняется до тех пор, пока в консоли управления компьютером не будет выполнена перезагрузка или действие администратора?
Вот что я могу подтвердить - уничтожение 16-битного процесса, который устанавливает эксклюзивную блокировку
Это использует небольшую консольную программу, которая устанавливает эксклюзивную блокировку для файла в том же локальном каталоге. Программа работает до тех пор, пока пользователь не нажмет клавишу, а затем разблокирует файл. Вот что происходит:
Если он запущен из командной строки и убит в диспетчере задач, он снимает блокировку. Процесс уничтожения - это конкретный cmd.exe, который запустил программу. Убив его, открой замок.
Если запустить, нажав, а затем убить, закрыв окно, блокировка снимается.
Однако, если запустить его, щелкнув, а затем убив файл conhost.exe в диспетчере задач, он не снимет блокировку. В этом случае также нет cmd.exe, потому что он был нажат. Таким образом, единственный способ убить его - убить conhost.exe или ntvdm.exe, в котором он запущен. Замок остается на месте до перезагрузки.
Если запустить его, щелкнув, а затем убив файл ntvdm.exe в диспетчере задач, он снимает блокировку.
Эксклюзивная блокировка никогда не препятствует удалению файла. Тем не менее, Windows не позволяет копировать файл в проводнике, пока блокировка установлена.
Итак, два разных поведения в зависимости от того, запускается ли задача через приглашение cmd или через нажатие и уничтожение подсистемы conhost или ntvdm. Конечно, уничтожение подсистемы ntvdm.exe также убивает все другие процессы, выполняемые в потоке ntvdm.