며칠 전 회사 엘레베이터에서 뒤에 있던 사람들이 하던 이야기.

메인 쓰레드가 종료되면 프로세스도 종료되는 것 아닌가요?

어잉. 그런가?
고개를 돌려 대답을 해주고 싶었지만… 참았습니다.

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

그럼 사람들은 왜 저런 미신을 가지게 되었을까.
아마도 메인 함수가 리턴하면 다른 쓰레드들이 존재하더라도 프로세스가 종료되는 것을 봐왔기 때문 아닐까?

그렇습니다. 메인 함수가 리턴하면 다른 쓰레드들이 살아 있더라도 프로세스가 종료됩니다.
하지만 메인 쓰레드가 종료되었기 때문에 프로세스가 종료되는 것은 아닙니다.

이때 프로세스가 종료되는 이유는 메인 함수가 끝나고 CRT에서 exit 함수를 호출 해주기 때문입니다.
윈도우즈에서 exit는 내부적으로 ExitProcess를 호출합니다.

그럼 메인 쓰레드가 종료되어도 프로세스가 종료되지 않는다는 사실은 어떻게 확인해볼 수 있을까?
다른 쓰레드를 하나 생성해 놓은 후 메인 함수에서 ExitThread를 호출해 메인 쓰레드만 종료시켜 보면 됩니다.
메인 쓰레드가 죽어도 프로세스는 종료되지 않는 걸 볼 수 있습니다.

함께 읽으면 좋은 글: