Media Log

이것은 윈도우 프로그래밍 이야기.
길을 걷다 보면 간혹 듣게 되는 이야기. 는 아니고 소프트웨어 회사의 사무실이나 엘레베이터에서 가끔 들을 수 있는 이야기.
메인 쓰레드가 종료되면 프로세스도 종료되는 것 아닌가요?
어잉. 그런가?

답은 아니오이다. 메인 쓰레드가 종료된다고 프로세스가 종료되는 것은 아니다.
ExitProcess 같은 함수를 통해 명시적으로 프로세스를 종료시키거나, 모든 쓰레드가 종료되었을 때 프로세스는 종료된다.

그럼 사람들은 왜 저런 미신을 가지게 되었을까. 아마도 메인 함수에서 리턴할 때 다른 쓰레드들이 존재하더라도 프로세스가 종료되는 것을 봐왔기 때문일 것이다.
그렇다. 메인 함수가 리턴하면 다른 쓰레드들이 잘 살아 있더라도 프로세스가 종료된다.
하지만 메인 쓰레드가 종료되었기 때문에 프로세스가 종료되는 것은 아니다. 이 때 프로세스가 종료되는 이유는 메인 함수가 끝나고 CRT에서 exit 함수를 호출 해주기 때문이다. exit()는 물론 내부적으로 ExitProcess를 호출한다.

다른 쓰레드를 생성해 놓은 뒤 메인 함수 내에서 ExitThread 함수를 사용해 메인 쓰레드만 종료시켜 보면 프로세스가 종료되지 않는다는 것을 살펴 볼 수 있을 것이다.
저작자 표시 비영리 동일 조건 변경 허락
신고

submit