Mengapa saya bisa mengganti nama executable yang berjalan, tetapi tidak menghapusnya?

12

Semuanya ada dalam judul, tetapi lebih resmi:

Mengapa Windows membiarkan saya mengganti nama yang dapat dijalankan yang dapat dijalankan, tetapi tidak menghapusnya?

marco-fiset
sumber

Jawaban:

12

Benar-benar tidak ada yang namanya mengganti nama file. File dapat memiliki lebih dari satu nama atau tanpa nama, jadi bukan file yang Anda ganti namanya tetapi entri direktori. Mengganti nama adalah operasi pada entri direktori, yang tidak terpengaruh oleh fakta bahwa file dikunci untuk dieksekusi.

David Schwartz
sumber
2
Hmm, mengapa upaya apa pun untuk mengubah nama file biasa yang terbuka untuk dibaca atau ditulis gagal?
Serge
5
@Serge: Karena proses yang membuka file secara khusus memintanya gagal dengan mengatur flag terbuka yang sesuai.
David Schwartz
apa bendera terbuka spesifik?
n611x007
2
Kemungkinan besar, pengaturan dwShareModeke nol atau menggunakan tanda OF_SHARE_COMPATatau OF_SHARE_EXCLUSIVE.
David Schwartz
6

Itu tidak memungkinkan untuk menghapus file yang dapat dieksekusi dan DLL karena Windows memetakan bagian dari file yang dapat dieksekusi ke dalam memori sebagai bagian dari proses penciptaan, sehingga diperlukan file selama masa proses.

Sayangnya saya tidak punya alasan mengapa masih memungkinkan untuk mengganti nama file tersebut. Saya kira ini dilakukan untuk mengaktifkan pembaruan file dll dan exe ketika mereka berjalan untuk meminimalkan waktu gangguan layanan.

Sebaliknya, linux (unix in general) memungkinkan untuk menghapus file yang dapat dieksekusi ketika sedang berjalan:

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
Serge
sumber
Perhatikan bahwa mis. Linux juga memetakan bagian dari file yang dapat dieksekusi ke dalam memori, tetapi tidak memiliki masalah yang memungkinkan Anda untuk menghapus file yang dapat dijalankan yang dapat dijalankan.
ChrisInEdmonton
2
@ChrisInEdmonton Ya, tapi ini saya jelaskan di sini: unix.stackexchange.com/questions/49299/…
Serge
Serge, penjelasannya bagus. :)
ChrisInEdmonton
Linux tidak akan memungkinkan Anda untuk menghapus file saat sedang dieksekusi. Anda dapat, bagaimanapun, menghapus entri direktori, karena itu tidak mengeksekusi.
David Schwartz
@ DavidSchwartz silakan lihat pembaruan untuk jawaban saya. Linux mengizinkan saya untuk memutuskan tautan file apa pun yang sedang dijalankan asalkan saya memiliki cukup izin untuk menghapus file itu.
Serge
2

Saya kira itu karena nama hanyalah atribut dari konten biner file yang sama, jadi selama datanya ada, pegangannya, dipegang oleh proses yang berjalan karena itu tidak akan berubah.

ppeterka
sumber