Tất cả mọi thứ là trong tiêu đề, nhưng chính thức hơn:
Tại sao Windows cho phép tôi đổi tên một tệp thực thi đang chạy, nhưng không xóa nó?
Tất cả mọi thứ là trong tiêu đề, nhưng chính thức hơn:
Tại sao Windows cho phép tôi đổi tên một tệp thực thi đang chạy, nhưng không xóa nó?
Câu trả lời:
Thực sự không có gì gọi là đổi tên một tập tin. Một tệp có thể có nhiều hơn một tên hoặc không có tên, vì vậy đó không phải là tệp bạn đang đổi tên mà là mục nhập thư mục. Đổi tên là một hoạt động trên mục nhập thư mục, không bị ảnh hưởng bởi thực tế là tập tin bị khóa để thực thi.
dwShareMode
về 0 hoặc sử dụng OF_SHARE_COMPAT
hoặc OF_SHARE_EXCLUSIVE
cờ.
Nó không cho phép xóa tệp thực thi và DLL vì Windows ánh xạ các phần của tệp thực thi vào bộ nhớ như một phần của quá trình tạo, do đó, nó cần tệp trong suốt vòng đời của quy trình.
Thật không may, tôi không có lý do thực sự tại sao nó vẫn cho phép đổi tên các tập tin như vậy. Tôi đoán rằng điều này được thực hiện để cho phép cập nhật các tập tin dll và exe trong khi chúng đang chạy để giảm thiểu thời gian gián đoạn dịch vụ.
Ngược lại, linux (unix nói chung) cho phép xóa một tập tin thực thi trong khi nó đang chạy:
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