พื้นหลัง
ปีที่แล้วฉันรวบรวมระบบบล็อก / เว็บเซิร์ฟเวอร์แบบพกพาที่ฉันสามารถเรียกใช้จากแฟลชไดรฟ์ มันยอดเยี่ยมมากและใช้งานได้ยอดเยี่ยมโดยเฉพาะใน XP ปัญหาคือว่าเมื่อมันทำงานใน Windows 7 แต่ละ spawns โปรแกรมคอนโซลสองconhost.exe
ขั้นตอนกระบวนการของตัวเองรวมทั้งสำเนาของ
ปัญหา
ในกรณีของระบบบล็อกแบบพกพาแต่ละหนึ่งในองค์ประกอบของเซิร์ฟเวอร์ (ของ MySQL mysqld.exe
, ของ Apache สองกรณีของhttpd.exe
, VisualSVN ของทั้งสองกรณีของvisualsvnserver.exe
และของ PHP กรณีหลายphp-cgi.exe
) spawns conhost.exe
เป็นตัวอย่างของ ในขณะนี้ (ที่ไม่มีสำเนาของการphp-cgi.exe
ใช้งานฉันมีห้าอินสแตนซ์ของการconhost.exe
ใช้งานโดยไม่ติดกับรอบของ CPU แต่ใช้หน่วยความจำ 22MB (นอกเหนือจาก 80MB ที่กระบวนการจริงกำลังใช้งานอยู่)
วิจัย
ตั้งแต่ Windows 7 ได้รับการปล่อยตัว (และผมคิดว่าอาจจะเป็นตั้งแต่ Vista) ผมมีหลายต่อหลายครั้งพยายามที่จะคิดออกว่าสิ่งที่วัตถุประสงค์ต่างๆกระบวนการ (ใหม่) โฮสต์ (เช่นconhost.exe
, dllhost.exe
และtaskhost.exe
) ทำและไม่ว่าพวกเขาเป็นจริงที่จำเป็น ฉันได้ลองฆ่าพวกมันแล้วและพบว่าโปรแกรมคอนโซลยังคงทำงานต่อไปได้ทั้งสำหรับโปรแกรมที่ใช้หน้าต่างคอนโซลและที่ไม่ทำงาน (เช่นเซิร์ฟเวอร์)
ฉันคุ้นเคยกับ " csrss.exe
Windows Vista" ทั้งหมดconhost.exe
แล้วและได้เห็นคำอธิบายนั้น (เกือบทุกคำ) เหมือนกันหลายครั้ง ปัญหาคือทุกคนเพียงแค่คัดลอกวางคำอธิบายเดียวกันซึ่งไม่เป็นประโยชน์ ทั้งหมดที่กล่าวคือใน XP- แอปพลิเคชันคอนโซลที่“ โฮสต์โดย” หรือ“ ทำงานภายใต้” csrss.exe
แต่ใน Windows 7 พวกเขาถูกย้ายไปconhost.exe
เพื่อความปลอดภัย ด้านความปลอดภัยนั้นสมเหตุสมผล แต่มันไม่ได้บอกว่ามันหมายถึงอะไรในการโฮสต์มันหรือทำไม / เมื่อมันจำเป็น (หรือว่าเป็นไปได้ที่จะหลีกเลี่ยงได้ถ้าไม่จำเป็น) แม้แต่การสนทนาของเรย์มอนด์เฉินในเรื่องนั้นก็ทำให้เกิดความสับสนว่าทำไมแอปคอนโซลจึงโฮสต์แตกต่างกันเลย
สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถค้นหารายละเอียดคำอธิบายทางเทคนิคคือโพสต์บล็อกของ Microsoftซึ่งดูเหมือนจะเสริมความคิดว่ามันเป็นเพียงเกี่ยวกับ GUI และหน้าต่างของแอปคอนโซล สิ่งนี้ทำให้ฉันสงสัยยิ่งขึ้นว่าconhost.exe
จำเป็นสำหรับโปรแกรมแบบไม่มีหน้าต่างเช่นเซิร์ฟเวอร์เหล่านี้หรือไม่ หากไม่มีหน้าต่างเลยทำไมฉันต้องเสียทรัพยากรและถ่วงพื้นที่กระบวนการด้วยกระบวนการที่ไม่จำเป็น? เหตุใด Windows จึงตรวจไม่พบเมื่อไม่จำเป็นและหลีกเลี่ยง การตอบสนองของ SecurityMatt นั้นก็มีประโยชน์เล็กน้อยในส่วนที่เกี่ยวกับคำอธิบายทางเทคนิค แต่อีกครั้งไม่เพียงพอของข้อมูลที่ฉันกำลังมองหา
conhost
ฉันไม่ได้เป็นเพียงคนเดียวที่ได้พยายามคิดหาวิธีที่จะหยุดกรณีที่ไม่จำเป็นของ บุคคลนี้ถามเกี่ยวกับการปิดการใช้งานและได้รับการบอกเพียง“ มันเป็นไปไม่ได้” โดยไม่มีความพยายามหรือความคิดเพิ่มเติมเกี่ยวกับมัน Hugh Dและ“ แทบจะไม่มีฟีเจอร์”ชี้ให้เห็นปัญหาด้วยอินสแตนซ์ที่ซ้ำซ้อนจำนวนมากconhost
(อย่างน้อยก็csrss
มีเพียงหนึ่งสำเนาที่ทำงานอยู่) รวมถึงการใช้ทรัพยากรและอินสแตนซ์ที่เอ้อระเหยหลังจากกระบวนการลูกของพวกเขาได้สิ้นสุดลงแล้ว ฉัน Lauferถามว่า / จำเป็นหรือไม่
การสังเกตและการพยายามแก้ไขปัญหา
หากพวกเขาไม่จำเป็นจริง ๆ ตลอดเวลา (อีกครั้งฉันไม่เคยเห็นผลร้ายใด ๆ จากการฆ่าพวกเขา) จากนั้นฉันคิดว่าฉันสามารถ (อย่างรำคาญ) แก้ปัญหาโดยการแทนที่เซิร์ฟเวอร์ด้วยชุดไฟล์ที่ทำงานเซิร์ฟเวอร์ รอแล้วฆ่าสำเนาของconhost
สิ่งที่พวกเขาทำให้เกิดการเรียกใช้ แน่นอนว่าสิ่งนี้ต้องการวิธีที่รวดเร็วและง่ายดายในการพิจารณาว่าเป็นแบบใด FallenGameRถามวิธีรับอินสแตนซ์ของการconhost.exe
เชื่อมโยงกับโปรแกรมคอนโซลของ PID ที่ระบุ แต่ไม่ได้รับคำตอบ ฉันคิดว่าการดึงข้อมูล PID ของกระบวนการหลักควรทำเคล็ดลับ (ไม่ใช่ ProcessExplorer ไม่ใช่ตัวเลือกอัตโนมัติ / scriptableจำเป็นต้องมีวิธีแก้ปัญหา) แต่ไม่เพียง แต่จะต้องสร้างกรอบบางอย่างเพื่อรับ PID ของเด็ก (แทนที่จะเรียกใช้เพียงแค่ทำงานกับงาน) แต่มันก็หมายถึงการหาวิธีที่จะทำให้มันเข้ากันได้ ด้วย XP เช่นกัน (เช่นการตรวจสอบชื่อภาพของกระบวนการหลัก) โพสต์บล็อกนี้ให้วิธีการเดียว แต่ต้องใช้ PowerShell และแทบจะไม่เหมาะเลยไม่ต้องพูดถึงมันไม่ได้เกี่ยวกับความแตกต่างของการเรียกใช้สคริปต์
คำถาม (s)
บางทีไมโครซอฟท์คิดว่าไม่มีใครใช้พรอมต์คำสั่งอีกต่อไป (* ไอ * Windows 8 * ไอ *) และสันนิษฐานว่ามันไม่ใช่เรื่องใหญ่สำหรับพวกเขา แต่มีสถานการณ์ที่แน่นอนที่มีแอพคอนโซลหลายตัวทำงานอยู่ วางไข่กระบวนการที่ใช้หน่วยความจำมากขึ้นการใช้ PID แย่มากและการพยายามหลีกเลี่ยงมันเป็นสิ่งที่ดีที่สุดไม่สะดวกอย่างน่ากลัว
ใครบ้างมีข้อมูลที่ชัดเจนและเชื่อถือได้ในเรื่องนี้? อีกครั้งฉันได้อ่านคำอธิบายทั่วไปแล้ว ฉันสงสัย:
- ทำไมแอปพลิเคชันคอนโซลต้อง (ยังคง) ได้รับการจัดการแตกต่างกันเลย
- ภายใต้สถานการณ์ที่เฉพาะที่พวกเขาต้องการที่จะมี
conhost
- สิ่งที่ตามมาคือการฆ่า
conhost
- หากมีวิธีใดที่จะหยุด / ป้องกัน / ปิดการใช้งาน / ปิดกั้นหรืออย่างน้อยก็เป็นวิธีที่ง่ายต่อการจัดการกับมันได้อย่างรวดเร็ว?
conhost.exe
มันเทียบเท่ากับ PTY ของ Windows และcmd.exe
เป็นเชลล์
conshost.exe
ยังคงวางไข่