Latar Belakang
Tahun lalu saya menyusun sistem blog / web-server portabel yang dapat saya jalankan dari flash-drive. Ini hebat dan bekerja dengan sangat baik, terutama pada XP. Masalahnya adalah bahwa ketika dijalankan di Windows 7, setiap program konsol memunculkan dua proses, proses itu sendiri, ditambah salinan conhost.exe
.
Masalah
Dalam kasus sistem blog portabel, masing-masing komponen servernya (MySQL mysqld.exe
, dua instance Apache, dua instance httpd.exe
VisualSVN visualsvnserver.exe
, dan beberapa instance PHP php-cgi.exe
) memunculkan instance conhost.exe
. Pada saat ini (tanpa salinan yang php-cgi.exe
aktif, saya memiliki lima contoh conhost.exe
menjalankan, menggunakan hampir tidak ada siklus CPU, tetapi mengkonsumsi memori 22MB (selain 80MB bahwa proses aktual saat ini menggunakan).
Penelitian
Sejak Windows 7 dirilis (dan saya pikir mungkin sejak Vista), saya harus beberapa kali mencoba untuk mencari tahu persis apa tujuan berbagai proses (baru) host (misalnya, conhost.exe
, dllhost.exe
, dan taskhost.exe
) lakukan dan apakah mereka benar-benar diperlukan. Saya telah mencoba membunuh mereka dan menemukan bahwa program konsol terus bekerja, baik untuk program yang menggunakan jendela konsol, dan yang tidak (seperti server).
Saya sudah terbiasa dengan keseluruhan csrss.exe
⇨ Windows Vista ⇨conhost.exe
dan telah melihat penjelasan yang sama (hampir kata demi kata) beberapa kali. Masalahnya adalah semua orang hanya menyalin-paste penjelasan yang sama yang tidak membantu. Yang dikatakannya adalah bahwa di XP-, aplikasi konsol di mana "dihosting oleh" atau "dijalankan di bawah" csrss.exe
, tetapi di Windows 7, mereka dipindahkan ke conhost.exe
untuk keamanan. Aspek keamanan masuk akal, tetapi tidak mengatakan apa artinya meng-host-nya atau mengapa / kapan itu diperlukan (atau apakah mungkin untuk menghindarinya jika tidak perlu). Bahkan diskusi Raymond Chen tentang masalah ini menjelaskan mengapa aplikasi konsol dihosting secara berbeda sama sekali.
Hal terdekat yang dapat saya temukan pada penjelasan teknis yang terperinci adalah sebuah posting blog Microsoft yang sepertinya memperkuat gagasan bahwa ini hanya tentang GUI dan jendela aplikasi konsol. Ini membuat saya bertanya-tanya lebih keras apakah conhost.exe
diperlukan untuk program tanpa jendela seperti server ini. Jika tidak ada jendela sama sekali, lalu mengapa saya harus membuang sumber daya dan mengacaukan ruang proses dengan proses yang tidak perlu? Mengapa Windows tidak dapat mendeteksi ketika tidak perlu dan menghindarinya? Tanggapan SecurityMatt juga sedikit berguna dalam hal penjelasan teknis, tetapi sekali lagi, tidak cukup informasi yang saya cari.
Saya bukan satu-satunya yang telah mencoba mencari cara untuk menghentikan contoh yang tidak perlu conhost
. Orang ini bertanya tentang menonaktifkannya dan diberi tahu hanya "tidak mungkin" tanpa usaha lebih lanjut atau memikirkannya. Hugh D dan “Hardly a feature” menunjukkan masalah dengan banyak, contoh berlebihan conhost
(setidaknya dengan csrss
, hanya ada satu salinan berjalan), termasuk penggunaan sumber daya dan contoh yang tersisa setelah proses anak-anak mereka berakhir. I Laufer mempertanyakan apakah / kapan itu perlu.
Pengamatan dan Upaya Solusi
Jika mereka tidak benar-benar diperlukan setiap saat (sekali lagi, saya belum melihat efek buruk dari membunuh mereka), maka saya kira saya bisa (sangat menjengkelkan) mengatasi masalah dengan mengganti server dengan file batch yang menjalankan server , tunggu, lalu bunuh salinan conhost
yang mereka jalankan. Tentu saja ini membutuhkan cara yang cepat dan mudah untuk menentukan yang mana itu. FallenGameR bertanya bagaimana mendapatkan instance yang conhost.exe
terkait dengan program konsol PID yang diberikan tetapi tidak mendapatkan jawaban. Saya akan berpikir bahwa hanya mengambil PID dari proses induk harus melakukan trik (tidak, ProcessExplorer bukan pilihan, otomatis / skripsolusi diperlukan), tetapi tidak hanya akan membutuhkan pembuatan semacam kerangka kerja untuk mendapatkan PID anak (bukan hanya menjalankannya dan selesai dengan tugas), tetapi itu juga berarti mencari cara untuk membuatnya kompatibel dengan XP juga (misalnya, memeriksa nama-gambar dari proses induk). Posting blog ini memberikan satu cara, tetapi membutuhkan PowerShell dan hampir tidak ideal, belum lagi tidak menyebutkan konsekuensi dari menjalankan skrip.
Pertanyaan
Mungkin Microsoft memperkirakan bahwa tidak ada lagi yang menggunakan perintah-perintah (* batuk * Windows 8 * batuk *) dan dengan demikian diasumsikan bahwa itu bukan masalah besar untuk membebani mereka, tetapi pasti ada skenario di mana beberapa aplikasi konsol berjalan dan memiliki masing-masing dan setiap satu menelurkan proses yang ekstra, memakan memori, menggunakan PID adalah mengerikan, dan mencoba untuk mengatasinya, paling tidak, sangat tidak nyaman.
Adakah yang punya informasi definitif dan resmi tentang masalah ini? Sekali lagi, saya sudah membaca penjelasan umum; Saya bertanya-tanya:
- Mengapa aplikasi konsol harus (masih) ditangani secara berbeda sama sekali
- Dalam keadaan spesifik apa mereka perlu memiliki
conhost
- Apa akibatnya dari membunuh
conhost
- Jika ada cara untuk menghentikan / mencegah / menonaktifkan / memblokirnya atau setidaknya cara mudah untuk segera menghadapinya?
conhost.exe
itu setara dengan Windows dari PTY, dan cmd.exe
itu adalah shell.
conshost.exe
masih memijah?