Lý lịch
Năm ngoái tôi đã biên soạn một hệ thống blog / máy chủ web di động mà tôi có thể chạy từ ổ đĩa flash. Thật tuyệt vời và hoạt động tuyệt vời, đặc biệt là trên XP. Vấn đề là khi nó chạy trong Windows 7, mỗi chương trình giao diện điều khiển sinh ra hai quá trình, chính quá trình đó, cộng với một bản sao conhost.exe
.
Vấn đề
Trong trường hợp hệ thống blog di động, mỗi một trong các thành phần máy chủ của nó ( hai phiên bản của MySQL mysqld.exe
, hai trường hợp của httpd.exe
VisualSVN visualsvnserver.exe
và nhiều phiên bản của PHP php-cgi.exe
) sinh ra một thể hiện của conhost.exe
. Tại thời điểm này (không có bản sao php-cgi.exe
hoạt động, tôi có năm phiên bản conhost.exe
đang chạy, sử dụng bên cạnh không có chu kỳ CPU, nhưng tiêu thụ 22 MB bộ nhớ (ngoài 80 MB mà các quy trình thực tế hiện đang sử dụng).
Nghiên cứu
Kể từ khi Windows 7 được phát hành (và tôi nghĩ rằng có thể từ Vista), tôi có nhiều lần cố gắng để tìm ra chính xác những gì mục đích khác nhau quá trình (mới) máy chủ (ví dụ conhost.exe
, dllhost.exe
và taskhost.exe
) làm và cho dù họ là thực sự cần thiết. Tôi đã thử giết chúng và thấy rằng các chương trình giao diện điều khiển tiếp tục hoạt động, cả cho các chương trình sử dụng cửa sổ bàn điều khiển và những chương trình không (như máy chủ).
Tôi đã quen thuộc với toàn bộ csrss.exe
⇨ Windows Vistaconhost.exe
và đã thấy giải thích tương tự (gần như nguyên văn) nhiều lần. Vấn đề là tất cả mọi người chỉ đơn giản là sao chép-dán cùng một lời giải thích không hữu ích. Tất cả những gì nó nói là trong XP-, các ứng dụng bảng điều khiển trong đó các máy chủ lưu trữ được điều khiển bởi các máy chủ hay được điều hành bởi hệ thống điều khiển, hay csrss.exe
trong Windows 7, nhưng trong Windows 7, chúng đã được chuyển sang conhost.exe
để bảo mật. Khía cạnh bảo mật có ý nghĩa, nhưng nó không nói gì về ý nghĩa của việc lưu trữ nó hoặc tại sao / khi cần thiết (hoặc liệu có thể tránh nó nếu không cần thiết). Ngay cả cuộc thảo luận của Raymond Chen về vấn đề này cũng giải thích tại sao các ứng dụng bảng điều khiển được lưu trữ khác nhau.
Điều gần nhất mà tôi có thể tìm thấy để giải thích chi tiết, kỹ thuật là một bài đăng trên blog của Microsoft dường như củng cố ý tưởng rằng đó chỉ là về GUI và cửa sổ của ứng dụng giao diện điều khiển. Điều này khiến tôi băn khoăn thậm chí còn khó hơn liệu conhost.exe
có cần thiết cho các chương trình không có cửa sổ như các máy chủ này không. Nếu không có cửa sổ nào cả, vậy tại sao tôi phải lãng phí tài nguyên và làm lộn xộn không gian quy trình với các quy trình không cần thiết? Tại sao Windows không thể phát hiện khi không cần thiết và tránh nó? Phản hồi của SecurityMatt cũng hơi hữu ích đối với một lời giải thích kỹ thuật, nhưng một lần nữa, không đủ thông tin tôi đang tìm kiếm.
Tôi không phải là người duy nhất đã cố gắng tìm ra cách để ngăn chặn những trường hợp không cần thiết conhost
. Người này đã hỏi về việc vô hiệu hóa nó và được nói đơn giản là nó không thể thực hiện được mà không cần nỗ lực hay suy nghĩ gì thêm về nó. Hugh D và Hard Hầu như một tính năng, chỉ ra vấn đề với rất nhiều trường hợp dư thừa conhost
(ít nhất là với csrss
, chỉ có một bản sao duy nhất đang chạy), bao gồm cả việc sử dụng tài nguyên và các trường hợp kéo dài sau khi quá trình con của họ kết thúc. Tôi Laufer đặt câu hỏi liệu / khi nó cần thiết.
Quan sát và cố gắng giải pháp
Nếu chúng không thực sự cần thiết vào mọi lúc (một lần nữa, tôi đã không thấy bất kỳ ảnh hưởng xấu nào từ việc giết chúng), thì tôi cho rằng tôi có thể (rất khó chịu) giải quyết vấn đề bằng cách thay thế các máy chủ bằng các tệp bó chạy máy chủ , chờ đợi, và sau đó giết bản sao conhost
mà chúng gây ra để chạy. Tất nhiên điều này đòi hỏi một cách nhanh chóng và dễ dàng để xác định đó là cái nào. FallenGameR đã hỏi làm thế nào để có được phiên bản conhost.exe
liên kết với chương trình giao diện điều khiển của một PID nhất định nhưng không nhận được câu trả lời. Tôi nghĩ rằng chỉ cần truy xuất PID của tiến trình cha nên thực hiện thủ thuật (không, ProcessExplorer không phải là một tùy chọn, tự động / có thể tạo tập lệnhgiải pháp là bắt buộc), nhưng không chỉ yêu cầu tạo ra một số loại khung để có được PID của trẻ (thay vì chỉ đơn giản là chạy và thực hiện với nhiệm vụ), mà còn có nghĩa là tìm ra cách để làm cho nó tương thích với XP cũng vậy (ví dụ: kiểm tra tên hình ảnh của quá trình cha). Bài đăng trên blog này cung cấp một cách, nhưng nó yêu cầu PowerShell và hầu như không lý tưởng, chưa kể nó không nói gì về sự phân nhánh của việc chạy tập lệnh.
Câu hỏi
Có lẽ Microsoft cho rằng không ai sử dụng các lệnh nhắc nữa (* ho * Windows 8 * ho *) và vì vậy cho rằng đó không phải là vấn đề lớn để gây gánh nặng cho họ, nhưng chắc chắn có nhiều kịch bản trong đó nhiều ứng dụng bảng điều khiển đang chạy và có từng ứng dụng sinh ra một quá trình sử dụng thêm bộ nhớ, tiêu tốn bộ nhớ, là khủng khiếp và cố gắng làm việc xung quanh nó, tốt nhất là, bất tiện khủng khiếp.
Có ai có thông tin dứt khoát, có thẩm quyền về vấn đề này? Một lần nữa, tôi đã đọc lời giải thích chung chung; Tôi đang tự hỏi:
- Tại sao các ứng dụng bàn điều khiển phải (vẫn) được xử lý khác nhau
- Trong những trường hợp cụ thể họ cần phải có
conhost
- Những gì mà hậu quả là giết người
conhost
- Nếu có cách nào để ngăn chặn / ngăn chặn / vô hiệu hóa / chặn nó hoặc ít nhất là một cách dễ dàng để nhanh chóng xử lý vấn đề này?
conhost.exe
là tương đương với PTY của Windows và cmd.exe
là vỏ.
conshost.exe
vẫn sinh sản?