Фон
Минулого року я склав портативну систему блогу / веб-сервера, яку можна запускати з флешки. Це чудово і працює чудово, особливо на XP. Проблема полягає в тому, що при його запуску в Windows 7 кожна консольна програма породжує два процеси, сам процес, а також копію conhost.exe
.
Проблема
У випадку з портативною блоговою системою кожен її серверний компонент (MySQL mysqld.exe
, два екземпляри Apache, два екземпляри httpd.exe
VisualSVN visualsvnserver.exe
та кілька екземплярів PHP php-cgi.exe
) породжує примірник conhost.exe
. На даний момент (без жодної копії php-cgi.exe
активної роботи, у мене є п'ять екземплярів conhost.exe
запуску, використовуючи поруч ніякі цикли процесора, але споживаючи 22 МБ пам'яті (крім 80 МБ, які фактично використовуються фактичні процеси).
Дослідження
Оскільки Windows 7 була випущена (і я думаю , що, можливо , так як Vista), я кілька разів намагався з'ясувати , точно якою метою різні (нові) хост - процеси (наприклад, conhost.exe
, dllhost.exe
, і taskhost.exe
) робити , і чи є вони на насправді необхідно. Я спробував їх вбити і виявив, що консольні програми продовжують працювати, як для програм, що використовують вікно консолі, так і тих, які не використовують (як сервери).
Я вже знайомий із цілою « csrss.exe
Windows Vista»conhost.exe
і неодноразово бачив це (майже дослівне) пояснення . Проблема полягає в тому, що всі просто копіюють та вставляють те саме пояснення, яке не є корисним. Все це говорить про те, що в XP-консольних додатках, де "розміщено" або "працює під" csrss.exe
, але в Windows 7 вони були переміщені conhost.exe
для безпеки. Аспект безпеки має сенс, але він нічого не говорить про те, що означає його розміщення або чому / коли це необхідно (або чи можна уникнути цього, якщо не потрібно). Навіть дискусія Реймонда Чена з цього приводу вирішує питання, чому консольні програми взагалі розміщені по-різному.
Найближче, що я можу знайти до детального, технічного пояснення, - це повідомлення в блозі Майкрософт, яке, здається, посилює думку про те, що мова йде лише про графічний інтерфейс та вікно програми консолі. Це ще більше цікавить мене, чи conhost.exe
потрібно це для таких програм без вікон, як ці сервери. Якщо вікна взагалі немає, то чому я маю витрачати ресурси і захаращувати процесний простір непотрібними процесами? Чому Windows не може визначити, що це непотрібно, і уникнути цього? SecurityMatt в відповідь також був трохи корисний щодо технічного пояснення, але знову - таки, не вистачає інформації , я шукаю.
Я не єдиний, хто намагався знайти спосіб зупинити непотрібні випадки conhost
. Ця людина запитав про відключення, і йому сказали просто "це неможливо", не докладаючи жодних зусиль і не думаючи про це. Х'ю Д і "Навряд чи функція" вказали на проблему з численними зайвими примірниками conhost
(принаймні csrss
, запускається лише одна копія), включаючи використання ресурсів та затримані випадки після закінчення їхніх дочірніх процесів. Я Лауфер запитав, чи / коли це навіть потрібно.
Спостереження та спроби рішення
Якщо вони насправді не потрібні постійно (знову ж таки, я не бачив жодних негативних наслідків від їх вбивства), то, гадаю, я міг би (дуже дратує) вирішити проблему, замінивши сервери batch-файлами, на яких працює сервер. , зачекайте, а потім вкажіть копію, conhost
яку вони викликають. Звичайно, для цього потрібен швидкий і простий спосіб визначити, що це таке. FallenGameR запитав, як отримати екземпляр, conhost.exe
пов’язаний з консольною програмою даного PID, але не отримав відповіді. Я думаю, що просто отримання PID батьківського процесу повинно зробити трюк (ні, ProcessExplorer - це не варіант, автоматизований / сценарійрішення потрібно), але це не тільки вимагатиме створення якихось рамок, щоб отримати PID дитини (замість того, щоб просто запустити його і виконати із завданням), але це також означатиме з'ясування способу зробити його сумісним також із XP (наприклад, перевірка зображення-імені батьківського процесу). Ця публікація в блозі дає один спосіб, але вона вимагає PowerShell і навряд чи ідеальна, не кажучи вже про те, що нічого не говорить про наслідки виконання сценарію.
Питання (и)
Можливо, Microsoft подумав, що більше ніхто не використовує командні підказки (* кашель * Windows 8 * кашель *), і тому припустив, що обтяжувати їх не так вже й складно, але напевно є сценарії, де працює кілька консольних додатків, які мають кожен і кожен нерест зайвий, що займає пам'ять, PID-процес є жахливим, і намагатися обійти його в кращому випадку жахливо незручно.
Хтось має остаточну, авторитетну інформацію з цього питання? Знову я вже прочитав загальне пояснення; Я задаюся питанням:
- Чому консольні програми повинні (все-таки) взагалі по-різному оброблятися
- За яких конкретних обставин вони повинні мати
conhost
- Які наслідки вбивства
conhost
- Якщо є якийсь спосіб зупинити / запобігти / відключити / заблокувати його або, принаймні, простий спосіб швидко впоратися з цим вперед?
conhost.exe
це еквівалент Windows у PTY, і cmd.exe
це оболонка.
conshost.exe
таки нерестовий?