inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lập trình hệ thống Windows - Cơ bản

Liệt kê các tiến trình đang chạy

강사님 ExitProcess 와 TerminateProcess 에 대해 질문드립니다.

Đã giải quyết

356

kimsc

70 câu hỏi đã được viết

0

ExitProcess 관련 메뉴얼에

 

부탁드려 봅니다.

c system-programming vc++

Câu trả lời 2

1

nullnull8537

프로세스(.exe)가 ExitProcess() 함수를 호출하면 실행파일(.exe)이 로드한 모든 DLL에 대해 DllMain() 함수를 호출하게 됩니다. 매개변수는 DLL_PROCESS_DETACH가 될 것이고 이 과정에서 DLL 언로드와 관련된 코드가 수행될 것입니다. 보통 할당받은 자원을 해제하거나 개방했던 각종 핸들을 닫는 등 정리 절차에 관한 코드가 수행되는 것일 일반적인데 이 과정에서 해제 코드가 멈추는 등 흐름이 멈춰버리면 DllMain() 함수는 반환하지 못합니다. 이 경우 ExitProcess()는 DLL이 언로드 되지 않은 것으로 간주하여 계속 반환되기를 기다리게 됩니다. 로드한 전체 DLL 중 단 하나라도 이런 일이 발생한다면 ExitProcess() 함수는 끝내 반환하지 못하게 되고 결과적으로 프로세스가 종료되지도 못합니다.

더 중요한 것은 DLL 언로드가 진행된다고 판단한 후 내부 스레드들을 종료시키는데 그 절차를 진행하지 못하므로 ExitProcess()를 호출한 스레드는 그 지점에서 흐름이 멈추지만 나머지 스레드들은 여전히 작동하게 됩니다. 물론 일부 해제된 DLL이나 자원 때문에 오류가 발생할 가능성이 높고 그로 말미암아 비정상 종료될 가능성이 있습니다만 장담 할 수는 없습니다.

그리고 TerminateProcess()든 ExitProcess()든 어떤 경우라도 프로세스가 종료되면 프로세스가 사용했던 모든 자원은 OS가 회수합니다. 메모리는 가상 메모리 시스템을 사용하기 때문에 완벽히 회수되며 각종 파일 및 커널 오브젝트 같은 자원들도 회수 됩니다. 참고하시기 바랍니다. 😄

0

kimsc

감사합니다. 강사님

세마포어 개수에 따른 스레드 점유상태

0

61

2

메모리 맵과 비동기 입/출력 조합 #2 수업내용에 질문있습니다.

0

94

2

힙 메모리 블럭 관리 방법 질문

0

97

2

MapViewOfFile 원리 관련 질문있습니다

0

102

1

가상 메모리 시스템 영역 구분

0

95

2

스택 크기 결정 단계

0

75

2

시스템프로그래밍-응용편

0

130

2

바이트와 관련된 유튜브 영상을 못 찾겠어요ㅠㅠ

0

94

2

파일 복사에 관한 질문입니다

0

113

2

세마포어 예제에 대한 질문이 있습니다.

0

108

2

메모장 쓰레기값 ?

0

131

2

64 bit 운영체제라면 가상메모리가

0

180

2

alertable Wait 상태 질문있습니다

0

226

1

GetCurrentDirectory 관련 질문

0

169

2

세마포어 예제중 형변환에 대한 질문

0

162

2

강사님 dll 지연로딩 관련하여 질문 드립니다

0

205

3

선장님 , _beginThreadEx() 함수 원리는 어디서 정보를 얻을 수 있을까요?

0

285

2

메모리 맵 강의 예제의 결과가 이상합니다.

0

227

1

강사님 파일입출력(Callback함수)와 관련하여 질문 드립니다.

0

348

2

dll 명시적 링크 오류 (원인 및 해결 방법이 필요 합니다)

0

962

2

static 영역의 rw 가능한 곳은 어떤 데이터가 담기는지 궁금합니다.

0

221

1

TerminanteProcess 와 관련하여 질문 드립니다.

0

170

1

강사님 스레드 관련 질문 드립니다.

0

224

1

강사님 메뉴얼 중 이것도 궁금해서 여쭤봅니다.

0

208

2