실행중인 프로세스가 자신에 대해 delete 명령을 했을 때 어떻게 되나요?

글쓴이: 익명 사용자 / 작성시간: 금, 2011/08/26 - 3:51오후
ShellExecute(NULL,"open","delete.bat",NULL,NULL,SW_SHOW);
라고 코드를 작성하였습니다.( 이 코드를 test.exe로 컴파일하였습니다.)
delete.bat의 내용은 del test.exe입니다.
제 질문은 test.exe가 실행이 끝난후 delete.bat에 의해 자신이 삭제되는데요
생각해보면 실행중인 프로세스를 지우려니깐 실행이 완료된 후 delete.bat에 의해 자신(test.exe)이 삭제될텐데요
이러한 처리는 os 에서 해주는건가요?
조사해보니깐 ShellExecute() API 함수에 의해 하드 디스크에서 test.exe 파일은 삭제하고
메모리 상에는 test.exe가 맵핑됐기 때문에 그대로 남아있어서 계속 자신(test.exe)을 실행시킬 수 있대요.
제가 조사한 내용이 올바른건가요?
Forums:
윈도우에서는
윈도우에서는 모르겠고
리눅스에서는
조사한대로
file 은 삭제되도 이미 메모리에 로드된 상태여서 프로세스는 죽지않고..
할일 다하고..종료됩니다.
"실행중인 프로세스를 지우려니깐" del
"실행중인 프로세스를 지우려니깐"
del test.ext 는 실행중인 프로세스는 지우는게 아니고
파일을 지울뿐이에요..
고맙습니다.
그러면 실행중인 프로세스를 지울려고 했을 때, 파일만 지우고 메모리에 맵핑된 내용은 지우지 않는건 OS단에서 해주는건가요?
그점과 관련된 자료가 있다면 소개해주세요! 읽어보게요.
간단 답변
실행 파일이 '실행'되고 있다는것은 Memory에 Load되어 CPU에 Fetch될 수 있는 상태가 되어 있다는 것입니다...
이렇게 로드되어진 후에는 더이상 스토리지의 원본과는 상관이 없습니다...
윈도우에서는 메모리에 로드된 바이너리 (exe,
윈도우에서는 메모리에 로드된 바이너리 (exe, dll)는 삭제되지 않습니다.
"그러면 실행중인 프로세스를 지울려고 했을 때,
"그러면 실행중인 프로세스를 지울려고 했을 때, 파일만 지우고"
프로세스와 실행파일을 혼동하는듯 합니다.
프로세스는 실행파일이 메모리에 로드되어서 OS 의 스케쥴링을 받는 상태이고
실행파일은 스토리지에 저장되어 있는 상태입니다.
프로세스를 지운다면( == 죽인다면.. ) 하던일 멈추고 바로 종료될거에요.
프로세스와 실해파일의 차이는 아마도 공룡책(OS책) 에 나와 있지 않을까 싶어요..
고맙습니다
공룡책 읽어볼께요!
파일시스템도 보셔야 할 것 같은..파일시스템 차이에
파일시스템도 보셔야 할 것 같은..파일시스템 차이에 기반한...
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
댓글 달기