Arka fon
Geçen yıl bir flash sürücüden çalıştırabileceğim taşınabilir bir blog / web sunucusu sistemini derledim. Harika ve harika çalışıyor, özellikle de XP'de. Sorun şu ki, Windows 7'de çalıştırıldığında, her konsol programının iki işlem, işlemin kendisi ve bunun bir kopyası ortaya çıkıyor conhost.exe
.
Sorun
Taşınabilir blog sistemi durumunda, sunucu bileşenlerinin her biri (MySQL'ler mysqld.exe
, Apache'nin iki örneği httpd.exe
, VisualSVN'nin iki örneği visualsvnserver.exe
ve PHP'nin birden çok örneği php-cgi.exe
) bir örneği ortaya çıkarır conhost.exe
. Şu anda ( php-cgi.exe
etkin kopya conhost.exe
yokken, CPU döngüsünün yanında, ancak 22 MB bellek tüketen (gerçek işlemlerin şu anda kullandığı 80 MB'a ek olarak) kullanan beş çalışan örneğim var.
Araştırma
Windows 7 serbest bırakıldı (ve Vista beri muhtemelen düşünüyorum), ben anlamaya çalıştık çeşitli vesilelerle var tam olarak çeşitli (yeni) konak süreçleri (örneğin, hangi amaçla conhost.exe
, dllhost.exe
ve taskhost.exe
) yapmak ve ister aslında gereklidir. Onları öldürmeye çalıştım ve konsol programlarının hem konsol penceresi kullanan programlar hem de (sunucular gibi) programlarda çalışmaya devam ettiğini gördüm.
Ben zaten tüm " csrss.exe
Windows Vista" ile tanıştımconhost.exe
ve aynı (neredeyse sözlü) bir açıklama defalarca gördüm . Sorun şu ki, herkes basitçe yardımcı olmayan aynı açıklamayı kopyalar. Tek söylediği, XP’de “barındırdığı” veya “altından geçtiği” konsol uygulamalarında csrss.exe
, ancak Windows 7’de conhost.exe
güvenlik için taşındıkları . Güvenlik yönü anlamlıdır, ancak onu barındırmanın ne anlama geldiği veya neden / ne zaman gerekli olduğu (veya gerekmediği takdirde önlenmesinin mümkün olup olmadığı) hakkında hiçbir şey söylemez. Raymond Chen'in konuyla ilgili tartışması bile , konsol uygulamalarının neden farklı bir şekilde barındırıldığına dair açıklıyor.
Detaylı, teknik bir açıklama bulabileceğim en yakın şey, yalnızca konsol uygulamasının GUI'sı ve penceresiyle ilgili olduğu fikrini pekiştirmiş görünen Microsoft blog yazısı . Bu conhost.exe
, bu sunucular gibi penceresiz programlar için gerekli olup olmadığını daha da merak etmemi sağlıyor . Hiç bir pencere yoksa neden kaynakları boşa harcamalıyım ve gereksiz yere işlem alanını karıştırmalıyım? Windows neden gereksiz olduğunu tespit edip önleyemiyor? SecurityMatt’ın cevabı da teknik bir açıklama açısından biraz yararlı oldu, ancak yine de aradığım bilgilerin yeterli değildi.
Gereksiz örnekleri durdurmanın bir yolunu bulmaya çalışan tek kişi ben değilim conhost
. Bu kişiye , onu devre dışı bırakmak istedi ve daha fazla çaba göstermeden ya da düşünülmeden basitçe “mümkün değil” denildi. Hugh D ve “Neredeyse bir özellik” konuyu , çocuk kullanımı sona erdikten sonra kaynak kullanımı ve kalan örnekler de dahil olmak üzere çok sayıda, gereksiz conhost
(en azından csrss
yalnızca tek bir kopyanın yayınlandığını) gösteren örneklerle belirtti. Laufer gerekli olduğunda bile / ne zaman sorguladım.
Gözlemler ve Çözüm Girişimleri
Aslında her zaman gerekli olmazlarsa (tekrar, onları öldürmekten kötü bir etki görmedim), o zaman sanırım sunucuları çalıştıran sunucuları toplu iş dosyalarıyla değiştirerek, sorunu giderebilirim (çok rahatsız edici) , bekle ve sonra conhost
kaçmalarının bir kopyasını öldür . Elbette bu, hangisinin olduğunu belirlemenin hızlı ve kolay bir yolunu gerektirir. FallenGameR , verilen bir PID'ninconhost.exe
bir konsol programıyla ilişkilendirilmiş örneğini nasıl elde edeceğini sordu ancak bir cevap alamadı. Ana işlemin PID'sini almanın hile yapması gerektiğini düşünüyorum (hayır, ProcessExplorer bir seçenek değil, otomatik / komut dosyasıyla yazılabilir).çözüm gereklidir), ancak yalnızca çocuğun Kimliğini almak için bir tür çerçeve oluşturmayı gerektirmez (yalnızca çalıştırma ve görevi yerine getirmek yerine), aynı zamanda onu uyumlu hale getirmenin bir yolunu bulmak anlamına da gelir. XP ile de (ör. ana sürecin görüntü ismini kontrol ederek). Bu blog yazısı bir yol gösteriyor, ancak PowerShell'i gerektiriyor ve senaryoyu çalıştırmanın sonuçları hakkında hiçbir şey söylemediğinden bahsetmek zor değil.
Soru (lar)
Belki de Microsoft hiç kimsenin artık komut istemleri kullanmadığını (* öksürük * Windows 8 * öksürük *) ve bu yüzden onları zorlamak için büyük bir sorun olmadığını varsayıyor, ancak birden fazla konsol uygulamasının çalıştığı ve her birinin bulunduğu senaryolar var. Ekstra, bellek tüketen, PID kullanan bir süreç oluşturmak çok zordur ve bunun üzerinde çalışmaya çalışmak en iyi ihtimalle korkunç derecede sakıncalıdır.
Bu konuda kesin ve yetkili bilgileri olan var mı? Yine, genel açıklamayı zaten okudum; Merak ediyorum:
- Konsol uygulamaları neden (hala) farklı şekilde ele alınmalı?
- Hangi belirli şartlar altında bunlar ihtiyaç var
conhost
- Sonuçları öldürmenin ne olduğu
conhost
- Durdurmanın / engellemenin / devre dışı bırakmanın / engellemenin ya da en azından hızlıca başa çıkmanın kolay bir yolu varsa?
conhost.exe
Windows’un bir PTY’ye eşdeğer cmd.exe
olduğunu ve kabuk olduğunu düşündüm .
conshost.exe
hala doğuyor?