본문 바로가기

[뭘, 이런걸 다?]

[뭘, 이런걸 다?] svchost.exe 의 정체

가끔 컴퓨터가 느려서 ctrl-shift-esc 를 눌러서 작업표시줄을 보면 svchost.ext 라는 파일이 메모리나 CPU를 다량으로 섭취(..)하고 있는 장면을 볼수 있다. 모르고 살면 모르는 건데, 알고나면 기분이 좋지 아니하게 된다. (바이러스 아닌가 하는 의구심도 들고)


[대체 뭘까? 메모리 90M를 잡고 있는 저 svchost.exe 프로세스는?]

svchost.exe 파일은 윈도우 시스템 파일로 Win32 서비스들을 처리하기 위한 포괄적인 호스트 프로세스(Generic Host Process)이다. Microsoft windows 는 동적 링크 라이브러리(Dynamic Link Library, 일명 DDL)를 이용해서 공통기능을 수행할 수 있게 해준다. 하지만 DLL만으로는 동작할 수 없기 때문에, DLL를 이용하기 위해서는 실행 프로그램이 필요하다. 그래서 svchost.exe 파일같은 실행가능한 프로세스가 있어야 한다. MS윈도우즈에는 백그라운드로 실행되는 '서비스'라는 것들이 있는데, 그것들의 수행을 svchost.exe 가 맡는다. 하지만 그렇다고 해서 특정 서비스svchost.exe 프로세스가 1:1 로 맵핑되는건 아니다. 그랬다간 svchost.exe 프로세스만 100여개가 뜨는 일도 요원한 일만은 아니게 된다.

svchost.exe 는 우선 윈도우 시작시에 윈도우 레지스트리에 있는 서비스들을 검사해서 읽어들일 서비스들의 목록을 만든다. 그런 다음 서비스들을 그룹핑 한 다음, 몇 개의 독립된 svchost.exe 프로세스로 나누어 수행한다. 이는 무리하게 많은 프로세스가 기동된다던가, 아니면 한 프로세스가 모든 일을 위임받아 처리하다가 문제가 생겨 통채로 다 날라가게 된다던가 하는, 두 가지 경우 모두를 막기 위함이다.

정리하면 svchost.exe 프로세스는 윈도우즈 서비스를 백그라운드로 구동하는 프로세스이다.

그런데, 아쉽게도 일반적으로는 어느 svchost.exe 프로세스가 어떤 서비스 그룹을 수행하는지 알 수가 없다. 하지만, 그렇다고 방법이 없는건 아닌데, 몇 가지 중 방법 하나만 소개해 보기로 한다.

가장 쉬운건 Tool 을 이용하는 건데 지금은 MS 로 흡수되버린 sysinternals의 유명한 프로그램인 Process Explorer를 이용하면 된다.


[process explorer 를 실행한 다음 마우스로 슬쩍 올려다 놓으면 어떤 서비스들이 그룹핑 되어 있는지 확인가능하다]

그런다음, 혹시 자주 CPU를 높게 잡아먹거나 확인해 보고 아니다 싶은 서비스가 발견된다면, 찾아서 제어판 - 컴퓨터 관리 -서비스 항목에서 Disable 로 만들어 주자.

참조 :

http://windowshelp.microsoft.com/Windows/ko-KR/help/057580a1-7002-4f43-9240-a74f42cb05c91042.mspx

http://qaos.com/article.php?sid=1432

http://www.online-tech-tips.com/computer-tips/how-to-fix-svchostexe-errors-and-problems-with-high-cpu-usage/