실행중인 실행 파일의 이름을 바꾸고 삭제할 수없는 이유는 무엇입니까?


12

모든 것이 제목에 있지만 더 공식적으로는 :

Windows에서 실행중인 실행 파일의 이름을 바꿀 수는 있지만 삭제할 수없는 이유는 무엇입니까?

답변:


12

실제로 파일 이름을 바꾸는 것과 같은 것은 없습니다. 파일은 하나 이상의 이름을 갖거나 이름을 가질 수 없으므로 이름을 바꾸려는 파일이 아니라 디렉토리 항목입니다. 이름 바꾸기는 디렉토리 항목에 대한 작업이며 파일이 실행을 위해 잠겨 있다는 사실의 영향을받지 않습니다.


2
흠, 왜 읽거나 쓰기 위해 열려있는 일반 파일의 이름을 바꾸려는 시도가 실패합니까?
서지

5
@Serge : 파일을 연 프로세스에서 적절한 열기 플래그를 설정하여 파일을 실패하도록 요청했기 때문입니다.
David Schwartz

어떤 특정 오픈 플래그?
n611x007

2
대부분 dwShareMode0으로 설정 OF_SHARE_COMPAT하거나 또는 OF_SHARE_EXCLUSIVE플래그를 사용합니다 .
David Schwartz

6

Windows는 실행 파일의 일부를 프로세스 작성의 일부로 메모리에 맵핑하므로 실행 파일 및 DLL을 삭제할 수 없으므로 프로세스 수명 동안 파일이 필요합니다.

불행히도 여전히 그러한 파일의 이름을 바꿀 수있는 진정한 이유는 없습니다. 이것은 서비스 중단 시간을 최소화하기 위해 실행중인 dll 및 exe 파일의 업데이트를 가능하게하기 위해 수행 된 것 같습니다.

반면 리눅스 (일반적으로 유닉스)는 실행 파일이 실행되는 동안 삭제할 수 있습니다 :

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

2
@ChrisInEdmonton 예, 그러나 여기에 설명했습니다 : unix.stackexchange.com/questions/49299/…
Serge

서지, 좋은 설명이 있습니다. :)
ChrisInEdmonton

Linux에서는 파일이 실행되는 동안 파일을 삭제할 수 없습니다. 그러나 디렉토리 항목이 실행되고 있지 않으므로 디렉토리 항목을 제거 할 수 있습니다.
David Schwartz

@DavidSchwartz 내 답변에 대한 업데이트를 참조하십시오. 리눅스는 파일을 삭제할 권한이 있다면 실행중인 파일을 연결 해제 할 수 있습니다.
서지

2

이름이 파일의 동일한 이진 내용의 속성이기 때문에 데이터가있는 한 실행중인 프로세스가 유지하는 핸들은 변경되지 않기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.