배경
작년에 나는 플래시 드라이브에서 실행할 수있는 휴대용 블로그 / 웹 서버 시스템을 컴파일했다. 훌륭하고 특히 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.exe
Windows 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.exe
Windows의 PTY와 동등한 것으로 생각 cmd.exe
했으며 껍질이었습니다.
conshost.exe
여전히 생성됩니까?