메인 쓰레드가 종료되면 프로세스도 종료되는 것 아닌가요?
길을 걷다 보면 간혹 듣게 되는 이야기. 는 아니고 소프트웨어 회사의 사무실이나 엘레베이터에서 가끔 들을 수 있는 이야기.
메인 쓰레드가 종료되면 프로세스도 종료되는 것 아닌가요?어잉. 그런가?
답은 아니오이다. 메인 쓰레드가 종료된다고 프로세스가 종료되는 것은 아니다.
ExitProcess 같은 함수를 통해 명시적으로 프로세스를 종료시키거나, 모든 쓰레드가 종료되었을 때 프로세스는 종료된다.
그럼 사람들은 왜 저런 미신을 가지게 되었을까. 아마도 메인 함수에서 리턴할 때 다른 쓰레드들이 존재하더라도 프로세스가 종료되는 것을 봐왔기 때문일 것이다.
그렇다. 메인 함수가 리턴하면 다른 쓰레드들이 잘 살아 있더라도 프로세스가 종료된다.
하지만 메인 쓰레드가 종료되었기 때문에 프로세스가 종료되는 것은 아니다. 이 때 프로세스가 종료되는 이유는 메인 함수가 끝나고 CRT에서 exit 함수를 호출 해주기 때문이다. exit()는 물론 내부적으로 ExitProcess를 호출한다.
다른 쓰레드를 생성해 놓은 뒤 메인 함수 내에서 ExitThread 함수를 사용해 메인 쓰레드만 종료시켜 보면 프로세스가 종료되지 않는다는 것을 살펴 볼 수 있을 것이다.
'Programming' 카테고리의 다른 글
CString 의 비밀 (6) | 2012.04.12 |
---|---|
쉘의 파일 오퍼레이션을 잡아챌 수 있는 ICopyHook 인터페이스 (0) | 2012.04.06 |
메인 쓰레드가 종료되면 프로세스도 종료되는 것 아닌가요? (0) | 2012.03.26 |
어떻게 함수의 undecorated name을 추측 할 수 있을까? (3) | 2012.02.12 |
왜 static 멤버 함수에는 const를 붙일 수 없을까? (0) | 2012.02.06 |
SetFilePointer 보다는 SetFilePointerEx를 사용해야 한다 (1) | 2012.01.16 |