在 Windows 中,通过 taskkill 终止进程后文件锁是否还会保留?

在 Windows 中,通过 taskkill 终止进程后文件锁是否还会保留?

我们这里不讨论重新启动/重启(类似于另一个问题)。这个问题区分了 Windows 处理 taskkill 上现有文件锁定的方式与响应关机/重启的方式的不同。

如果我强制终止一个程序,它锁定的文件是否仍然保持锁定状态,或者当进程死亡时锁是否会被释放?

强制终止的意思是,例如使用任务管理器中的“taskkill”命令或“结束进程树”。

进一步说明一下,我指的不是留下未移除的常驻辅助锁定文件的进程,例如 MS Word。我指的是实际独占或共享文件锁定的状态。

taskkill 会释放文件锁吗?还是说文件锁会一直保持到重新启动或管理员用户在计算机管理控制台内执行操作时为止?

以下是我可以确认的 - 终止一个放置独占锁的 16 位进程

这是使用一个小型控制台程序对同一本地目录中的文件设置独占锁。该程序保持运行,直到用户按下某个键,然后它将解锁文件。以下是发生的事情:

  • 如果在命令提示符下启动并在任务管理器中终止,它会释放锁。要终止的进程是启动该程序的特定 cmd.exe。终止它会释放锁。

  • 如果通过单击启动,然后通过关闭窗口终止,则锁定被释放。

  • 但是,如果通过单击然后终止任务管理器中的 conhost.exe 来启动,它不会释放锁。在这种情况下,也没有 cmd.exe,因为它被单击了。因此,终止它的唯一方法是通过终止它正在运行的 conhost.exe 或 ntvdm.exe。锁会一直保留到重新启动后。

  • 如果通过单击启动然后终止任务管理器中的 ntvdm.exe,它会释放锁。

  • 独占锁定实际上不会阻止文件被删除。但是,在锁定期间,Windows 不允许在资源管理器中复制文件。

因此,根据任务是通过 cmd 提示符启动还是通过单击并终止 conhost 或 ntvdm 子系统启动,会出现两种不同的行为。当然,终止 ntvdm.exe 子系统也会终止 ntvdm 线程中正在执行任务的任何其他进程。

答案1

是的,锁仍然存在,但你无法预测操作系统何时会释放它们。请参阅锁定文件()锁定文件Ex()

如果进程在文件的一部分被锁定的情况下终止,或者关闭了具有未完成锁定的文件,则操作系统会解锁这些锁定。但是,操作系统解锁这些锁定所需的时间取决于可用的系统资源。因此,建议您的进程在终止时明确解锁它所锁定的所有文件。如果不这样做,如果操作系统尚未解锁这些文件,则可能会拒绝访问这些文件。

相关内容