2009-10-17 2 views
2

Windows 서버 2003에서 실행되는 고유 코드와 관리 코드가 혼합 된 프로세스가 있습니다.프로세스가 종료되면 정확히 어떻게됩니까?

프로세스 탐색기 내에서 프로세스를 죽일 때 100 % CPU 상태가되어 잠시 동안 심지어 떠나기 전에 10 분). 이 시간 동안 나는 그것을 "죽"거나 다른 일을 할 수 없다.

프로세스 탐색기의 종료를 통해 프로세스를 통해 프로세스를 종료 할 때 프로세스에서 어떤 결과가 발생합니까? 나는 이것이 어떤 소멸자도 부르지 않는다고 생각한다. 그렇다면 그와 같은 CPU 사용을 유발할 수있는 것은 무엇일까?

감사합니다, 댄

+1

Vista/Win7에 있나요? –

+1

그는'윈도우 서버 2003 '이라고 말했다. – Jim

+0

죄송합니다. 감사합니다. 리소스 키트의 kill.exe,/F 옵션 또는 pskill.exe가있는 taskkill.exe와 같은 다른 도구를 사용하여 동일한 동작을합니까? –

답변

1

대신 작업 관리자의 (프로세스 탭) 프로세스 끝내기를 사용하여 시도하고 나는 그러나, 작업 관리자 또는 Winternal의 프로세스 탐색기 중 하나에 킬 프로세스 트리를 선택하는 경우 차이가 있는지 여부 시도 그것이 도움이 될지 의심 스럽다.

이 프로세스는 (거의) 즉시 중지 될 예정이지만 일부 숨어있는 방법이 있습니다. 자신의 응용 프로그램을 작성했다면, 그렇지 않다고 가정합니다. 다른 프로세스가 당신을 빼앗기는 것을 좋아하지 않을 가능성이 더 큽니다. 프로세스 모니터를 빠른 새로 고침 속도로 설정하고 CPU 열을 정렬하십시오. 이제 어떤 프로세스가 100 % 문제를 일으키는 지 확인해야합니다. 가능성이 가장 높은 시스템.

많은 메모리를 사용하는 경우에는 esp. 전체 메모리가 실제 메모리보다 많으면 시스템이 재구성됩니다 (예 : 디스크에서 실제 메모리로 메모리 이동). 1.5GB 메모리를 차지하면서 500+ 탭을 열어 Firefox를 죽이면 유사한 현상이 발생합니다 (시스템이 멈출 때까지). 이 동작 (천천히 메모리를 재구성)은 이후 버전의 Microsoft Windows에서 향상되었습니다.

업데이트 : 내부적으로, proc expl. TerminateProcess (다른 것들 중에서)를 호출하여 모든 핸들과 스레드를 강제 종료합니다. MSDN API ref이라고 말합니다. "TerminateProcess는 종료를 시작하고 즉시 반환합니다.이 프로세스 내 모든 스레드의 실행을 중지하고 모든 보류중인 I/O의 취소를 요청하며, 보류중인 모든 I/O가 완료되거나 취소 될 때까지 종료 된 프로세스를 종료 할 수 없습니다.". 즉, I/O가이 프로세스를 차단할 수 있음을 의미합니다 (I/O가 프로세스를 100 %로 가져올 수있는 방법이 궁금하지만 I/O는 일반적으로 그렇게하지 않습니다).

+0

나는 이것이 100 % cpu를 사용하는 프로세스이고 다른 프로세스는 아닌 것으로 확신한다. 기억 장치가 재조직됩니다. 흥미로운 소리 - 나는 이것을 들여다 볼 것이다. 감사합니다 – DanJ

0

스레드가 여러 개 있거나 릴리스되지 않은 다른 리소스가있는 경우 응용 프로그램이 종료되기 전에 모든 스레드가 해제 될 때까지 기다리는 중일 수 있습니다.

응용 프로그램이 종료되면 사용되는 모든 자원이 해제 될 것이므로 이상적이지만이 경우 도움을주기 위해 IDispose 인터페이스를 구현해야합니다. 그렇지 않으면 일부 파일이 열 수는 다시 열 수 없으며 유일한 옵션은 다시 부팅하는 것입니다.

다른 응용 프로그램을 죽이려고하면이 문제가 발생합니까?

프로그램을 단순화하거나 너무 많은 리소스를 사용하기 전에 프로그램을 종료하고이 문제가 발생할 시점을 결정할 수 있는지 확인한 다음 수행 한 작업을 더 잘 이해할 수 있습니다 이것이이 문제의 원인입니다.

+0

응용 프로그램이 이런 식으로 죽으면 IDisposable 개체는 더 이상 호출되지 않으며 모든 recource (개체 핸들)는 강제 닫힙니다. – Abel

0

Process Explorer에서 스레드를 볼 수 있습니까? 실행중인 항목과 특히 100 % CPU를 차지하는 항목을 확인하십시오. 호출 스택을 찾고 특정 스레드 또는 기능을 격리 할 수 ​​있는지 확인하십시오. 가능한 경우 여기에 답변을 게시하십시오!

+0

프로세스 탐색기는 프로세스를 종료 한 후에 스레드 스택을 가져올 수 없습니다. – DanJ

1

분명히 뭔가가 계속 실행 중입니다. 이로 인해 정지/교착 상태가 발생합니다. 시도하고 무슨 일이 일어나고 있는지 알기 위해 도구를 사용하는 방법을 설명 할 수는 있지만, 아마도 당신을 마스터에게 연기해야합니다 ... Tess - Lab on High CPU Hang

문제점을 파악하는 데 사용할 수있는 방법을 사용할 수있었습니다. 내 응용 프로그램과 함께.

0

내 심령 디버거는 많은 리소스 (예 : 파일/reg 핸들, win32k 객체 등)가 여전히 할당되어있어 커널이이를 정리하고 있습니다. 프로세스 탐색기를 사용하여 응용 프로그램을 크랙하면 리소스 사용량이 많이 보입니까?

+0

리소스 사용량이 정상적으로 보였지만 뭔가가 누락 된 것 같습니다. 메모리, 핸들, 스레드, 모두 괜찮아 보여. 내가 찾아야 할 다른 자원들? – DanJ

관련 문제