在 Windows 上,为什么不能覆盖正在运行的应用程序的可执行文件?

Pel*_*ier 3 windows linux

在 linux 系统上,这根本不会引起任何问题:exe 在启动时会加载到 ram 中。然后文件可以消失、移动等,无需任何交互。

在 Windows 上似乎并非如此。这种行为有原因吗?

Ƭᴇc*_*007 7

来自 StackOverflow 的Locking Executing Files:Windows 有,Linux 没有。为什么?

来自Oren Shemesh回答

Linux 有一个引用计数机制,所以你可以在它执行时删除文件,只要某个进程(之前打开它)有一个打开的句柄,它就会继续存在。当您删除该文件时,该文件的目录条目将被删除,因此无法再打开它,但已经使用该文件的进程仍然可以使用它。一旦使用该文件的所有进程终止,该文件将被自动删除。

Windows 没有此功能,因此它会强制锁定文件,直到从它执行的所有进程都完成。

来自 Perry Lorier 的回答

Linux 确实锁定了文件。如果您尝试覆盖正在执行的文件,您将收到“ETXTBUSY”(文本文件繁忙)。然而,您可以删除该文件,当最后一个引用被删除时,内核将删除该文件。(如果机器没有完全关闭,这些文件是检查文件系统时“已删除的 inode 的 d-time 为零”消息的原因,它们没有被完全删除,因为正在运行的进程有对它们的引用,现在他们是。)