배경
작년에 나는 플래시 드라이브에서 실행할 수있는 휴대용 블로그 / 웹 서버 시스템을 컴파일했다. 훌륭하고 특히 XP에서 훌륭하게 작동합니다. 문제는 Windows 7에서 실행될 때 각 콘솔 프로그램 이 프로세스 자체와 사본 두 프로세스를 생성 한다는 것입니다 conhost.exe.
문제
휴대용 블로그 시스템의 경우 각 서버 구성 요소 (MySQL mysqld.exe, Apache의 두 인스턴스 httpd.exe, VisualSVN의 두 인스턴스 visualsvnserver.exe및 PHP의 여러 인스턴스 php-cgi.exe)는 각각의 인스턴스를 생성합니다 conhost.exe. 현재 ( php-cgi.exe활성 복사본이 conhost.exe없으면 CPU 사이클을 사용하지 않고 실제 프로세스가 현재 사용하는 80MB 외에도 22MB의 메모리를 사용하는 5 개의 인스턴스가 실행 중입니다.
연구
윈도우 7이 출시 된 (내가 비스타 이후 아마도 생각) 때문에, 나는 알아 내기 위해 노력 여러 차례이 정확히 다양한 (신규) 호스트 프로세스 (예를 들어, 어떤 목적으로 conhost.exe, dllhost.exe그리고 taskhost.exe) 수행 여부 그들은 실제로 필요합니다. 나는 그들을 죽이려고 시도했지만 콘솔 창을 사용하는 프로그램과 서버와 같이 사용하지 않는 프로그램 모두에서 콘솔 프로그램이 계속 작동한다는 것을 알았습니다.
나는 이미 전체 csrss.exe⇨ Windows Vista ⇨에conhost.exe 대해 잘 알고 있으며 동일한 (거의 그대로) 설명을 여러 번 보았습니다 . 문제는 모든 사람들이 도움이되지 않는 동일한 설명을 복사하여 붙여 넣는 것입니다. XP-, "호스트"또는 "실행"이라는 콘솔 응용 프로그램에서는 csrss.exeWindows 7에서는 conhost.exe보안 을 위해 콘솔 응용 프로그램 으로 이동했습니다 . 보안 측면은 의미가 있지만 호스팅의 의미 또는 필요한 이유 / 필요한 경우 (또는 필요하지 않은 경우이를 피할 수 있는지 여부)에 대해서는 언급하지 않습니다. 이 문제에 대한 Raymond Chen의 토론 조차도 콘솔 앱이 전혀 다르게 호스팅되는 이유를 설명합니다.
상세하고 기술적 인 설명을 찾을 수있는 가장 가까운 것은 Microsoft 블로그 게시물 이며 콘솔 응용 프로그램의 GUI 및 창에 대한 아이디어를 강화하는 것 같습니다. 이로 인해 conhost.exe이러한 서버와 같은 창없는 프로그램이 필요한지 더 궁금해 합니다. 창이 전혀 없다면 왜 자원을 낭비하고 불필요한 프로세스로 프로세스 공간을 어수선해야합니까? Windows가 불필요한시기를 감지하여 피할 수없는 이유 SecurityMatt의 응답 은 기술적 인 설명과 관련하여 약간 유용했지만, 내가 찾고있는 정보가 충분하지 않습니다.
의 불필요한 인스턴스를 중지하는 방법을 알아 낸 유일한 사람은 아닙니다 conhost. 이 사람 은 이 기능을 비활성화하는 것에 대해 물었고 더 이상 노력하거나 생각하지 않고 단순히 "불가능"하다고 들었습니다. Hugh D 와 “Hardly a feature” 는 하위 프로세스가 종료 된 후 리소스 사용량 및 느린 인스턴스를 포함하여 conhost(적어도 csrss하나의 사본 만 실행 된) 수많은 중복 인스턴스의 문제를 지적했습니다 . Laufer는 필요한지 여부에 대해 질문했습니다.
관찰 및 솔루션 시도
그들이 실제로 항상 필요하지 않은 경우 (다시 말해서, 그들을 죽이는 악영향을 본 적이 없다면) 서버를 서버를 실행하는 배치 파일로 대체하여 문제를 해결할 수 있다고 생각합니다. , 기다렸다가 conhost실행되도록 하는 사본 을 종료하십시오. 물론 이것이 어느 것인지 결정하는 빠르고 쉬운 방법이 필요합니다. FallenGameRconhost.exe 은 주어진 PID의 콘솔 프로그램과 관련된 인스턴스를 얻는 방법을 물 었지만 답변을 얻지 못했습니다. 부모 프로세스의 PID를 검색하면 트릭을 수행해야한다고 생각합니다 (No. ProcessExplorer는 옵션이 아니며 자동화 된 스크립트 가능해결책이 필요합니다). 그러나 단순히 PID를 실행하고 작업을 수행하는 대신 자녀의 PID를 얻기 위해 일종의 프레임 워크를 만들어야 할뿐만 아니라 호환 가능한 방법을 찾는 것을 의미합니다. XP에서도 마찬가지입니다 (예 : 부모 프로세스의 이미지 이름 확인). 이 블로그 게시물은 한 가지 방법을 제공하지만 PowerShell이 필요하며 스크립트를 실행 한 결과에 대한 언급은 말할 것도없고 이상적입니다.
질문
아마도 Microsoft는 아무도 더 이상 명령 프롬프트를 사용하지 않으므로 (* cough * Windows 8 * cough *) 부담을 줄 필요가 없다고 가정했지만 여러 콘솔 응용 프로그램이 실행되고 각각 하나씩있는 시나리오가 있습니다. 메모리를 많이 사용하는 PID를 사용하는 추가 프로세스가 끔찍하기 때문에 문제를 해결하는 것은 매우 불편합니다.
아무도 그 문제에 대한 결정적이고 권위있는 정보를 가지고 있습니까? 다시 한 번 나는 일반적인 설명을 읽었습니다. 궁금:
- 콘솔 응용 프로그램을 전혀 다르게 처리해야하는 이유
- 어떤 특정 상황에서 그들이 필요로 가지고
conhost - 살해 의 결과
conhost - 이를 중지 / 예방 / 비활성화 / 차단할 수있는 방법이 있거나 최소한 쉽게 후미를 처리 할 수있는 방법이 있습니까?
conhost.exeWindows의 PTY와 동등한 것으로 생각 cmd.exe했으며 껍질이었습니다.
conshost.exe여전히 생성됩니까?