답변:
좀 빠지는. 파일이 이미 프로그램에 의해 열려 있습니다. 파일을 삭제 한 다음 다른 버전으로 교체해도 프로그램이 완료 될 때까지 원본 파일은 디스크에 이름이 없어도 파일이 열려 있지 않기 때문에 실행중인 프로그램에 영향을 미치지 않습니다. 파일에 대한 모든 핸들이 닫힐 때만 디스크의 데이터 블록이 해제됩니다. 그때까지 열린 파일을 평상시처럼 읽고 쓸 수 있습니다. 유일한 변경 사항은 이름이 제거 된 이후로 다른 사람이 파일을 열 수 없다는 것입니다.
프로그램이 삭제 될 때 프로그램의 일부는 이미 램으로 읽혀졌지만 나중에 폐기되고 나중에 다시 읽거나 이전에 실행되지 않은 프로그램의 새 부분은 여전히 삭제 된 파일에서로드 될 수 있습니다.
rm -rf /
합니다 .....
rm -rf /
바로 다음에 두 번째로 실행하면 작동하지 않습니다.)
lsof
그것이 '좀비'파일이 어떻게 생겼는지 알고 있지만 그러한 파일의 내용을 사라지지 않도록 저장할 수있는 방법이 있습니까? 마지막 파일 핸들이 언제 죽습니까?
root
을 사용하여 이름을 만들 수 있으므로 삭제를 방지 할 수 있습니다 linkat
. 그러나 실행 파일과 라이브러리는 메모리로 매핑되므로 파일 핸들이 필요하지 않습니다. 메모리 매핑이기 때문에 존재하는 파일에 대한 핸들을 얻는 방법을 모르겠습니다. 실행 파일은 실행되는 /proc
동안 액세스 할 수 있지만 복구 할 수없는 라이브러리 및 기타 메모리 매핑 파일 일뿐입니다. 그것에 대한 자세한 내용을 원한다면 별도의 질문으로 요청해야합니다.
는 IS
xterm
가 실행되는 동안 프로세스가 RAM에 캐시?
정확하게. 충돌없이 실행되는 동안 업데이트를 설치할 수있는 프로세스와 유사합니다. 또한 업데이트 후 서비스를 다시 시작해야하는 이유도 있습니다. 무언가가 실행되면 바이너리는 메모리에 있습니다.
제거되거나 교체 된 다른 파일 (보류 된 "열린"상태가 아닌 파일)에 의존하는 경우 문제가 발생할 수 있지만 이산과 같은 xterm
문제는 문제가되지 않습니다.
apt-get
를 제거xterm
하는 것이 아닙니다. 제거 하고 있으며, 어떻게 든xterm
프로세스에 의존하고 있는지 전혀 모릅니다. 그래서 "실행 중에 xterm을 왜 제거 할 수 있습니까?"에 관한 것입니다. 좋은 질문.