svchost.exe
Svchost.exe ( Service Host или SvcHost ) — это системный процесс , который может размещать одну или несколько служб Windows в Windows NT семействе операционных систем . [1] Svchost необходим при реализации общих сервисных процессов , когда несколько сервисов могут совместно использовать один процесс, чтобы снизить потребление ресурсов. Объединение нескольких служб в один процесс экономит вычислительные ресурсы, и это соображение особенно беспокоило разработчиков NT, поскольку создание процессов Windows занимает больше времени и потребляет больше памяти, чем в других операционных системах, например, в семействе Unix . [2] Однако если одна из служб вызовет необработанное исключение, весь процесс может завершиться сбоем. Кроме того, конечным пользователям может быть сложнее идентифицировать службы компонентов. Проблемы с различными размещенными службами, особенно с Центром обновления Windows , [3] [4] пользователи сообщают (и освещаются в прессе) как затрагивающие svchost.
Процесс svchost был представлен в Windows 2000 . [5] хотя базовая поддержка процессов общих служб существует начиная с Windows NT 3.1 . [2]
Выполнение
[ редактировать ]Его исполняемый образ, %SystemRoot% \System32\Svchost.exe или %SystemRoot% \SysWOW64\Svchost.exe (для 32-разрядных служб, работающих в 64-разрядных системах) запускается в нескольких экземплярах, каждый из которых содержит одну или несколько служб.
Службы, работающие в SvcHost, реализованы как динамически подключаемые библиотеки (DLL). Ключ реестра каждой службы должен иметь значение с именем ServiceDll под Подключ параметров , указывающий на DLL-файл соответствующей службы. Их Определение ImagePath имеет форму %SystemRoot%\System32\svchost.exe -k %service group%
; (т.е. нетсвкс ). Службы, использующие один и тот же процесс SvcHost, указывают один и тот же параметр, имея одну запись в базе данных SCM . При первом запуске процесса SvcHost с определенным параметром он ищет значение с тем же именем в разделе Ключ HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost , который интерпретируется как список имен служб. Затем он уведомляет SCM обо всех службах, которые он размещает. SCM не запускает второй процесс SvcHost ни для одной из полученных служб; вместо этого он просто отправляет команду «старт» соответствующему процессу SvcHost, содержащую имя службы, которая должна быть запущена в его контексте и чья соответствующая DLL SvcHost загружается.
Согласно презентации Microsoft 2003 года, минимальный рабочий набор общей службы составляет примерно 150 КБ вместо 800 КБ для отдельного процесса. [6]
Изменения в группировке узлов служб в Windows 10
[ редактировать ]Начиная с Windows 10 версии 1903, Microsoft изменила способ группировки служб в хост-процессы. В клиентских компьютерных системах с объемом памяти более 3,5 ГБ службы больше не группируются в процессы общего хоста. Вместо этого каждая служба запускается в своем собственном процессе. Это приводит к лучшей изоляции служб, что делает компьютерную систему более устойчивой к сбоям служб и уязвимостям, а также облегчает отладку. Однако это добавляет некоторые затраты памяти. [7]
Сервисные теги
[ редактировать ]Начиная с Windows Vista, внутренняя идентификация служб внутри общих процессов (включая svchost) достигается с помощью так называемых тегов службы. Тег службы для каждого потока хранится в SubProcessTag его блока среды потока (TEB). Тег распространяется по всем потокам, которые впоследствии запускает основной поток службы, за исключением потоков, созданных косвенно API -интерфейсами пула потоков Windows . [8]
Набор процедур управления тегами служб в настоящее время представляет собой недокументированный API , хотя он используется некоторыми утилитами Windows, такими как netstat, для отображения TCP -соединений, связанных с каждой службой. Некоторые сторонние инструменты, такие как ScTagQuery, также используют этот API. [8]
Идентификация и управление размещенными услугами
[ редактировать ]В Windows XP и более поздних выпусках команда tasklist /svc
показывает список служб, запускаемых каждым перечисленным процессом (т. е. каждым запущенным экземпляром svchost.exe), причем каждый отдельный экземпляр процесса svchost идентифицируется уникальным идентификационным номером процесса (PID).
В Windows Vista и Windows 7 вкладка «Службы» в диспетчере задач Windows включает список служб с указанием их групп и идентификаторов процессов (PID); щелчок правой кнопкой мыши по экземпляру svchost на вкладке «Процессы» диспетчера задач и выбор «Перейти к службам» переключает на этот список служб и выбирает службу, работающую под соответствующим экземпляром svchost.
В Windows 8 интерфейс диспетчера задач был оптимизирован таким образом, что каждую запись svchost можно одним щелчком мыши расширить до подсписка служб, работающих внутри нее.
Sysinternals под Process Explorer (доступен для бесплатной загрузки с сайта Microsoft) предоставляет дополнительную информацию о службах, работающих svchost.exe обрабатывается, когда пользователь наводит указатель мыши на экземпляр svchost в Process Explorer.
Ни один из вышеперечисленных методов не позволяет пользователю определить, какая из нескольких служб, работающих внутри экземпляра svchost, обращается к определенному ресурсу, т. е. процессору, диску, сети или памяти; Windows Монитор ресурсов учитывает (большую часть) этих ресурсов только на уровне процесса. Однако он показывает использование процессора на уровне обслуживания, на вкладке «ЦП». [9] Сервис-ориентированный список TCP-соединений и открытых UDP-портов можно получить с помощью команды netstat -b
. [10]
Чтобы устранить другие виды проблем со службой, работающей внутри экземпляра svchost, службы, предположительно вызывающие проблему, должны (все) быть переконфигурированы так, чтобы каждая работала внутри своего собственного экземпляра svchost. Например, sc config foo type= own
перенастроит службу с именем «foo» для запуска в собственном экземпляре svchost. Изменение введите обратно в Shared выполняется аналогичной командой. Чтобы такое изменение конфигурации вступило в силу, необходимо перезапустить службу. Однако этот процесс отладки не является надежным; в некоторых случаях может возникнуть ошибка Heisenbug , из-за которой проблема исчезает, когда служба работает отдельно. [11]
Более сложный метод устранения неполадок — создание изолированной сервисной группы. [12]
В Windows 10 , начиная с версии 1703, Microsoft переработала svchost, чтобы размещать только одну службу для каждого процесса, в зависимости от доступной системной памяти. [13] По умолчанию службы размещаются независимо, если в системе имеется не менее 3,5 ГБ ОЗУ.
См. также
[ редактировать ]- inetd
- системный
- Менеджер по контролю услуг
- Список компонентов Microsoft Windows
- Процесс запуска Windows NT
Ссылки
[ редактировать ]- ^ Руссинович, Соломон и Ионеску (2009 : 302)
- ^ Перейти обратно: а б «Общие услуги» . Архивировано из оригинала 6 октября 2014 года . Проверено 1 октября 2014 г.
- ^ Вуди Леонхард (16 декабря 2013 г.). «Microsoft обещает исправить «красную черту» SVCHOST в Windows XP «как можно скорее» » . Инфомир . Проверено 1 октября 2014 г.
- ^ «Svchost.exe становится хуже, прежде чем его исправят - Серия - Секреты Windows» . Проверено 1 октября 2014 г.
- ^ «Как устранить проблемы, связанные с хостом службы (svchost.exe)?» . Проверено 1 октября 2014 г.
- ^ Дэвид Б. Проберт, «Процессы обслуживания Windows»
- ^ «Изменения в группировке узлов служб в Windows 10» . Майкрософт. 27 августа 2021 г. Проверено 10 января 2021 г.
- ^ Перейти обратно: а б Руссинович, Соломон и Ионеску (2012 :335)
- ^ «Выяснение того, почему мой SVCHOST.EXE на 100% загружен процессором без сложных инструментов в Windows 7 — Скотт Хансельман» . Проверено 1 октября 2014 г.
- ^ Сомнительно, полезно ли это, поскольку обычно оно показывает только имя службы для работающего веб-браузера (например, оно перечисляет различные элементы информации, связанные с подключением к Интернету и используемыми портами, но записывает их все как просто «firefox.exe). ")
- ^ «Что такое svchost.exe и почему у меня так много его экземпляров?» . Проверено 1 октября 2014 г.
- ^ «Начало работы с SVCHOST.EXE, устранение неполадок» . Проверено 1 октября 2014 г.
- ^ «Изменения в группировке узлов служб в Windows 10» . Майкрософт . Проверено 30 апреля 2018 г.
Дальнейшее чтение
[ редактировать ]- Руссинович, Марк ; Соломон, Дэвид; Ионеску, Алекс (2009), Внутренние устройства Windows® (5-е изд.), Microsoft Press , ISBN 978-0-7356-2530-3
- Руссинович, Марк ; Соломон, Дэвид; Ионеску, Алекс (2012), Внутреннее устройство Windows. Часть 1 (6-е изд.), Microsoft Press , ISBN 978-0-7356-4873-9