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

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

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

在 Windows 上似乎不是这种情况。这种行为有什么原因吗?

答案1

来自 StackOverflow 的锁定执行文件:Windows 可以,Linux 不可以。为什么?

奥伦·谢梅什回答

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

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

来自 Perry Lorier 的回答

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

相关内容