バックグラウンド
昨年、フラッシュドライブから実行できるポータブルなブログ/ Webサーバーシステムをコンパイルしました。それは素晴らしく、特にXPで素晴らしい動作をします。問題は、Windows 7で実行すると、各コンソールプログラムが2つのプロセス、プロセス自体、およびのコピーを生成することconhost.exe
です。
問題
ポータブルブログシステムの場合、サーバーコンポーネント(MySQL mysqld.exe
、Apacheの2つのインスタンスhttpd.exe
、VisualSVNの2つのインスタンスvisualsvnserver.exe
、PHPの複数のインスタンスphp-cgi.exe
)のそれぞれがのインスタンスを生成しますconhost.exe
。この時点で(php-cgi.exe
アクティブなコピーがないconhost.exe
ため、CPUサイクルがほとんどない状態で実行中のインスタンスが5つありますが、実際のプロセスが現在使用している80MBに加えて22MBのメモリを消費します)。
研究
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と「Hardly a feature」は、子プロセスが終了した後のリソースの使用や残留インスタンスなど、多数の冗長なインスタンスconhost
(少なくともがcsrss
1つのコピーのみ実行されていた)の問題を指摘しました。ラウファーは、それが必要かどうか、いつ必要なのかを問いかけました。
観察と解決策の試み
それらが常に実際に必要ではない場合(再び、それらを殺すことによる悪影響は見ていません)、サーバーを実行するバッチファイルでサーバーを置き換えることで(非常にいらいらして)問題を回避できると思います、待ってから、conhost
実行させるコピーを強制終了します。もちろん、これには、どれであるかを迅速かつ簡単に判断する方法が必要です。FallenGameRconhost.exe
は、特定のPIDのコンソールプログラムに関連付けられたのインスタンスを取得する方法を尋ねましたが、回答が得られませんでした。親プロセスのPIDを取得するだけでうまくいくと思います(いいえ、ProcessExplorerはオプションではなく、自動化/スクリプト化可能ですソリューションが必要です)が、それは(単に実行してタスクを完了するのではなく)子のPIDを取得するために何らかのフレームワークを作成する必要があるだけでなく、互換性を持たせる方法を見つけることも意味しますXPでも同様です(たとえば、親プロセスのイメージ名を確認します)。このブログ投稿には1つの方法がありますが、PowerShellが必要であり、スクリプトを実行することの影響については何も述べていないことは言うまでもありません。
質問
おそらくマイクロソフトは、コマンドプロンプト(*咳* Windows 8 *咳*)をもう使用しないと考えているため、負担をかけることは大したことではないと考えていますが、複数のコンソールアプリが実行され、それぞれがすべてのシナリオを持っていることは間違いありません余分な、メモリを消費する、PIDを使用するプロセスを作成するのはひどく、それを回避しようとすると、せいぜいひどく不便です。
誰もが問題について決定的で信頼できる情報を持っていますか?繰り返しますが、私はすでに一般的な説明を読みました。不思議なんだけど:
- コンソールアプリケーションを(まだ)まったく異なる方法で処理する必要がある理由
- どのような特定の状況で彼らが持っている必要があるか
conhost
- 殺害の結果は何ですか
conhost
- それを停止/防止/無効化/ブロックする方法、または少なくとも後部でそれを迅速に処理する簡単な方法がありますか?
conhost.exe
がWindowsのPTYと同等でありcmd.exe
、シェルであると常に考えていました。
conshost.exe
まだ生成されているのでしょうか。