stringtranslate.com

svchost.exe

Svchost.exe ( Service Host o SvcHost ) es un proceso del sistema que puede alojar uno o más servicios de Windows en la familia de sistemas operativos Windows NT . [1] Svchost es esencial en la implementación de procesos de servicios compartidos , donde varios servicios pueden compartir un proceso para reducir el consumo de recursos. Agrupar múltiples servicios en un solo proceso conserva los recursos informáticos, y esta consideración fue de particular preocupación para los diseñadores de NT porque la creación de procesos de Windows lleva más tiempo y consume más memoria que en otros sistemas operativos, por ejemplo, en la familia Unix . [2] Sin embargo, si uno de los servicios causa una excepción no controlada, todo el proceso puede bloquearse. Además, identificar los servicios de los componentes puede ser más difícil para los usuarios finales. Los problemas con varios servicios alojados, particularmente con Windows Update , [3] [4] son ​​reportados por los usuarios (y encabezados por la prensa) como relacionados con svchost.

El proceso svchost se introdujo en Windows 2000 , [5] aunque el soporte subyacente para procesos de servicios compartidos existe desde Windows NT 3.1 . [2]

Implementación

Su imagen ejecutable, %SystemRoot% \System32\Svchost.exe o %SystemRoot% \SysWOW64\Svchost.exe (para servicios de 32 bits que se ejecutan en sistemas de 64 bits) se ejecuta en varias instancias, cada una de las cuales aloja uno o más servicios.

Los servicios que se ejecutan en SvcHost se implementan como bibliotecas vinculadas dinámicamente (DLL). La clave de registro de cada servicio debe tener un valor llamado ServiceDll bajo la subclave Parameters , que apunta al archivo DLL del servicio respectivo. Su definición de ImagePath tiene el formato ; (es decir, netsvcs ). Los servicios que comparten el mismo proceso SvcHost especifican el mismo parámetro, que tiene una única entrada en la base de datos de SCM . La primera vez que se inicia un proceso SvcHost con un parámetro específico, busca un valor del mismo nombre bajo la clave HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost , que interpreta como una lista de nombres de servicios. Luego, notifica a SCM todos los servicios que aloja. SCM no inicia un segundo proceso SvcHost para ninguno de esos servicios recibidos; En lugar de ello, simplemente envía un comando de "inicio" al proceso SvcHost respectivo que contiene el nombre del servicio que debe iniciarse dentro de su contexto y cuya DLL respectiva carga SvcHost.%SystemRoot%\System32\svchost.exe -k %service group%

Según una presentación de Microsoft de 2003, el conjunto de trabajo mínimo de un servicio compartido es de aproximadamente 150 KB en lugar de los 800 KB de un proceso independiente. [6]

Cambios en la agrupación de hosts de servicio en Windows 10

A partir de la versión 1903 de Windows 10, Microsoft cambió la forma en que se agrupan los servicios en procesos host. En los sistemas informáticos cliente con más de 3,5 GB de memoria, los servicios ya no se agrupan en procesos host compartidos. En su lugar, cada servicio se ejecuta en su propio proceso. Esto da como resultado un mejor aislamiento de los servicios, lo que hace que el sistema informático sea más resistente a las fallas y vulnerabilidades del servicio y más fácil de depurar. Sin embargo, agrega cierta sobrecarga de memoria. [7]

Etiquetas de servicio

A partir de Windows Vista, la identificación interna de los servicios dentro de los procesos compartidos (incluido svchost) se logra mediante las llamadas etiquetas de servicio. La etiqueta de servicio para cada subproceso se almacena en SubProcessTag de su bloque de entorno de subproceso (TEB). La etiqueta se propaga a todos los subprocesos que un subproceso de servicio principal inicia posteriormente, excepto los subprocesos creados indirectamente por las API de grupos de subprocesos de Windows . [8]

El conjunto de rutinas de gestión de etiquetas de servicio es actualmente una API no documentada, aunque algunas utilidades de Windows, como netstat, la utilizan para mostrar las conexiones TCP asociadas a cada servicio. Algunas herramientas de terceros, como ScTagQuery, también utilizan esta API. [8]

Identificación y gestión de servicios alojados

En Windows XP y ediciones posteriores, el comando tasklist /svcmuestra una lista de los servicios que ejecuta cada proceso enumerado (es decir, cada instancia en ejecución de svchost.exe), y cada instancia separada del proceso svchost se identifica mediante un número de identificación de proceso (PID) único.

En Windows Vista y Windows 7 , la pestaña "Servicios" del Administrador de tareas de Windows incluye una lista de servicios, mostrando sus grupos e identificadores de procesos (PID); al hacer clic derecho en una instancia de svchost en la pestaña "Procesos" del Administrador de tareas y seleccionar "Ir a servicio(s)", se cambia a esa lista de servicios y se selecciona el servicio que se ejecuta en la instancia de svchost correspondiente.

En Windows 8 , la interfaz del Administrador de tareas se simplificó para que cada entrada de svchost pueda expandirse con un solo clic a una sublista de servicios que se ejecutan dentro de ella.

El Explorador de procesos de Sysinternals (disponible como descarga gratuita de Microsoft) proporciona información adicional acerca de los servicios que se ejecutan bajo procesos svchost.exe , cuando el usuario pasa el mouse sobre una instancia de svchost en el Explorador de procesos.

Ninguno de los métodos anteriores permite al usuario identificar cuál de los múltiples servicios que se ejecutan dentro de una instancia de svchost accede a un recurso en particular, es decir, procesador, disco, red o memoria; el Monitor de recursos de Windows solo tiene en cuenta (la mayoría de) esos recursos a nivel de proceso. Sin embargo, muestra el uso del procesador a nivel de servicio, en la pestaña "CPU". [9] Se puede obtener una lista de conexiones TCP y puertos UDP abiertos que tengan en cuenta el servicio mediante el comando netstat -b. [10]

Para solucionar otros tipos de problemas con un servicio que se ejecuta dentro de una instancia de svchost, el servicio o los servicios que se sospecha que están causando el problema deben (todos) reconfigurarse para que cada uno se ejecute dentro de su propia instancia de svchost. Por ejemplo, sc config foo type= ownreconfigurará el servicio llamado "foo" para que se ejecute en su propia instancia de svchost. El cambio de tipo a compartido se realiza con un comando análogo. El servicio debe reiniciarse para que dicho cambio de configuración surta efecto. Sin embargo, este proceso de depuración no es infalible; en algunos casos, puede ocurrir un error de heisenbug , que hace que el problema desaparezca cuando el servicio se ejecuta por separado. [11]

Un método más complejo de resolución de problemas es crear un grupo de servicios aislado. [12]

En Windows 10 , a partir de la versión 1703, Microsoft rediseñó svchost para alojar solo un servicio por proceso, según la memoria del sistema disponible. [13] La configuración predeterminada hace que los servicios se alojen de forma independiente si el sistema tiene al menos3,5 GB de RAM.

Véase también

Referencias

  1. ^ Russinovich, Salomón y Ionescu (2009:302)
  2. ^ ab «Servicios compartidos». Archivado desde el original el 6 de octubre de 2014 . Consultado el 1 de octubre de 2014 .
  3. ^ Woody Leonhard (16 de diciembre de 2013). "Microsoft promete solucionar el problema de la línea roja de SVCHOST en Windows XP 'lo antes posible'". InfoWorld . Consultado el 1 de octubre de 2014 .
  4. ^ "Svchost.exe empeora antes de ser reparado - Serie - Secretos de Windows" . Consultado el 1 de octubre de 2014 .
  5. ^ "¿Cómo solucionar problemas relacionados con Service Host (svchost.exe)?" . Consultado el 1 de octubre de 2014 .
  6. ^ David B. Probert, "Procesos de servicio de Windows"
  7. ^ "Cambios en la agrupación de hosts de servicio en Windows 10". Microsoft. 2021-08-27 . Consultado el 2021-01-10 .
  8. ^ ab Russinovich, Salomón y Ionescu (2012:335)
  9. ^ "Cómo averiguar por qué mi SVCHOST.EXE está al 100 % de la CPU sin herramientas complicadas en Windows 7 - Scott Hanselman" . Consultado el 1 de octubre de 2014 .
  10. ^ No se sabe si esto es útil, normalmente solo muestra el nombre del servicio para el navegador web en ejecución (por ejemplo, enumera varios elementos de información relacionados con la conexión a Internet y los puertos en uso, pero los registra todos simplemente como "firefox.exe")
  11. ^ "¿Qué es svchost.exe y por qué tengo tantas instancias de él?" . Consultado el 1 de octubre de 2014 .
  12. ^ "Introducción a la solución de problemas de SVCHOST.EXE" . Consultado el 1 de octubre de 2014 .
  13. ^ "Cambios en la agrupación de hosts de servicio en Windows 10". Microsoft . Consultado el 30 de abril de 2018 .

Lectura adicional

Enlaces externos