Windows7은 사용자뿐만이 아닌 개발자에게도 편리한 기능을 가지고 있습니다.
그 중에 '대기 체인 분석' 이라는 것이 있습니다.
이것을 사용하면 프로그램을 종료 시켰는데는 프로세스는 죽지 않고 살아 있는 경우 어디서 문제가 되었는지 어느 정도 알아낼 수 있습니다.


이 프로그램은 제가 집에서 만든 서버 애플리케이션으로 X 버튼을 눌러서 종료시킵니다.


그런데 작업 관리자를 보면 프로세스가 아직 죽지 않았습니다(ProjectHF2.exe)

이 문제는 보통 워커 스레드를 사용하는 경우 특정 스레드가 죽지 않아서 발생하는 경우일것입니다.
그럼 어떤 스레드가 대기 상태에 있는지 알기 위해서 대기 체인 분석을 사용해보겠습니다.


리소스 버튼을 누르면 아래의 창이 나옵니다.


위 그림과 같이 프로세스를 선택 후 메뉴에서 '대기 체인 분석'을 선택합니다.


위와 같은 화면이 나오고 어떤 스레드가 어떤 이유로 대기하고 있는지 설명해줍니다.

이 기능은 Windows API 중 Wait Chain Traversal를 사용한 것입니다.
http://msdn.microsoft.com/ko-KR/library/ms681622(VS.85).aspx

어느 정도 제한은 있지만 이 API를 사용하면 데드락 상황도 판단할 수 있습니다.














저작자 표시
신고
by 흥배 2011.01.14 09:00
| 1 |

티스토리 툴바