가끔 디버깅을 하다 보면 딴 프로세스가 특정 파일 핸들을 가지고 있어서 삭제하지 못할 경우가 종종 발생한다. 이때 어떤 프로세스가 해당 파일/디렉토리 핸들을 가지고 있는지만 알면 쉽게 이 문제를 해결할 수 있다.

그래서 좀 쉬운 방법을 찾아봤는데, 역시나 stack overflow에 정리된 버전이 있었다.


몇가지 프리웨어/쉐어웨어 유틸리티를 제안하는 사람들도 있었는데, 개인적으로 특화된 전용 유틸리티보다는 SysInternals(마이크로소프트에 합병된 것으로 알고 있는데, 정확하진 않음)의 유틸리티를 선호하는지라 이 방법을 선택했다.


먼저 코맨드라인에서 Handle을 실행한다. 그러면 프로세스별 핸들 목록이 모두 나온다.

이 결과에서 삭제하려는 파일/디렉토리를 붙잡고 있는 프로세스를 찾을 수 있다.


특정 프로세스를 알아냈으면 해당 프로그램을 프로세스 관리자에서 종료하거나 Process Explorer로 강제 종료시키면 된다.


SysInternals의 핸들(Handle.exe) 유틸리티.

http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx



SysInternals의 Process Explorer :

http://technet.microsoft.com/en-us/sysinternals/bb896653




Posted by NeoZest