実行中の実行可能ファイルの名前を変更できるのに、削除できないのはなぜですか?


12

タイトルにはすべてが含まれていますが、より正式には:

Windowsで実行中の実行可能ファイルの名前を変更できるが、削除できないのはなぜですか?

回答:


12

ファイルの名前を変更するようなことは本当にありません。ファイルには複数の名前を付けることも、名前を付けないこともできるので、名前を変更するのはファイルではなく、ディレクトリエントリです。名前の変更は、ディレクトリエントリに対する操作であり、ファイルが実行のためにロックされているという事実の影響を受けません。


2
うーん、なぜ、読み取りまたは書き込み用に開いている通常のファイルの名前を変更しようとすると失敗するのですか?
セルジュ

5
@Serge:ファイルを開くプロセスは、適切なオープンフラグを設定することにより、ファイルの失敗を明確に要求するためです。
David Schwartz

特定のオープンフラグ
n611x007 2013

2
ほとんどのdwShareMode場合、ゼロに設定するか、OF_SHARE_COMPATまたはOF_SHARE_EXCLUSIVEフラグを使用します。
David Schwartz

6

Windowsは、実行可能ファイルの一部をプロセス作成の一部としてメモリにマップするため、実行可能ファイルとDLLを削除することはできません。そのため、プロセスの存続期間中にファイルが必要です。

残念ながら、そのようなファイルの名前を変更できる真の理由はありません。これは、サービスの中断時間を最小限に抑えるために、実行中に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

たとえば、Linuxは実行可能ファイルの一部もメモリにマップしますが、実行中の実行可能ファイルを削除することは問題ありません。
ChrisInEdmonton 2012年

2
はい@ChrisInEdmontonが、この私がここで説明:unix.stackexchange.com/questions/49299/...
セルジュ・

セルジュ、いい説明があります。:)
ChrisInEdmonton 2012年

Linuxでは、実行中にファイルを削除することはできません。ただし、ディレクトリエントリは実行されていないため、削除できます。
David Schwartz、

@DavidSchwartz私の回答の更新をご覧ください。Linuxでは、そのファイルを削除するのに十分な権限があれば、実行中のファイルのリンクを解除できます。
Serge

2

名前はファイルの同じバイナリコンテンツの属性にすぎないので、データが存在する限り、実行中のプロセスによって保持されているハンドルは変更されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.