为什么我可以重命名正在运行的可执行文件,但不能删除它?

为什么我可以重命名正在运行的可执行文件,但不能删除它?

一切都在标题中,但更正式的是:

为什么 Windows 允许我重命名正在运行的可执行文件,但不允许删除它?

答案1

实际上,没有重命名文件这种事。一个文件可以有多个名称,也可以没有名称,因此您重命名的不是文件,而是目录条目。重命名是对目录条目的操作,不受文件被锁定执行的影响。

答案2

它不允许删除可执行文件和 DLL,因为 Windows 在进程创建过程中将可执行文件的各个部分映射到内存中,因此在进程的生命周期内需要该文件。

不幸的是,我不知道为什么它仍然允许重命名此类文件。我猜这样做是为了在 dll 和 exe 文件运行时启用它们的更新,以最大限度地减少服务中断时间。

相比之下,Linux(一般为Unix)允许在可执行文件运行时删除它:

tmp]$ cp /usr/bin/md5sum .;ll md5*; \
(./md5sum /home/pub/iso/FC5/FC-5-i386-DVD.iso & ); \
rm md5sum ; ll md5*;ps -f
-rwxr-xr-x 1 sergey sergey 37276 Oct 16 02:38 md5sum
ls: cannot access md5*: No such file or directory
UID        PID  PPID  C STIME TTY          TIME CMD
sergey    2423  2422  0 02:32 pts/1    00:00:00 -bash
sergey    2533     1  0 02:38 pts/1    00:00:00 ./md5sum /home/pub/iso/FC5/FC-5-
sergey    2536  2423  0 02:38 pts/1    00:00:00 ps -f

答案3

我猜是因为名称只是文件相同二进制内容的一个属性,所以只要数据存在,正在运行的进程持有的句柄就不会改变。

相关内容