Aislar el servicio alojado (svchost.exe) en su propio proceso

13

Como muchos superusuarios probablemente ya saben, Microsoft utiliza svchost.exe para alojar múltiples servicios de Windows en un solo proceso, con un proceso por grupo de servicios.

En Windows 7 (¿y luego?), Se puede hacer clic derecho en un proceso específico de svchost.exe en el Administrador de tareas y seleccionar "Ir a los servicios" para ver los servicios que se ejecutan "dentro". En todas las versiones de Windows, también se puede usar Process Explorer .

Sin embargo, esto no permite ver, por ejemplo, qué servicio en particular está fijando la CPU al 100% o utilizando 700 MB de memoria. Uno puede detener manualmente los servicios en el mismo grupo y usar el proceso de eliminación, pero es tedioso, especialmente si el problema ocurre solo de manera intermitente.

Microsoft presumiblemente tiene una buena razón para agrupar servicios como este (reduciendo la sobrecarga por proceso, ¿tal vez?), Pero ¿hay alguna manera de obligar a un servicio específico a ejecutarse aislado en su propio svchost.exe?

Søren Løvborg
fuente

Respuestas:

16

No, la forma correcta es ejecutar este comando:

sc configwuauserv type= own

esto configura para ejecutar Windows Update en su propio proceso. Para revertir esto, ejecuta

sc config wuauserv type= share

desde un símbolo del sistema con derechos de administrador . Esto cambia el valor de configuración type. Si type es 0x20es un proceso grupal , si el valor es 0x10es un proceso propio .

Desde la actualización de Windows 10 Creators (versión 1703, compilación 15063), Windows lo hace solo si tiene suficiente RAM .

magicandre1981
fuente
1

Lo único que sé es a través de la piratería de registros. Se aplica el descargo de responsabilidad habitual de edición de la base de datos del registro (puede destruir cualquier cosa desde su instalación de Windows a toda la estructura del espacio-tiempo).

El siguiente ejemplo aísla el servicio Windows Update ( wuauserv), que se sabe que se comporta mal y utiliza recursos excesivos. El método ha sido probado solo en Windows 7 .

  1. Inicie regedit.exe (Editor del registro) y navegue hasta

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
    

    Esta clave contiene una subclave para cada grupo que contiene la configuración del grupo, así como un valor REG_MULTI_SZ para cada grupo que enumera los servicios en el grupo.

  2. Busque en la subclave el grupo actual del servicio de destino (en este ejemplo:) netsvcs, luego cree una nueva subclave con un nombre adecuado y contenidos idénticos. Recuerde observar los tipos de valor, así como los contenidos.

  3. Cree un valor REG_MULTI_SZ con el nombre del nuevo grupo, que contenga una única línea con el nombre del servicio; y elimine el nombre del servicio de su grupo existente REG_MULTI_SZ.

  4. A continuación, navegue a la subclave de servicio de destino debajo HKLM\SYSTEM\CurrentControlSet\services. En este ejemplo:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Edite el ImagePathvalor y cambie el nombre del grupo después -kal nuevo nombre del grupo.

  6. Reinicie el servicio de destino (por ejemplo, utilizando la pestaña Servicios en el Administrador de tareas, o mediante services.msc), y debería aparecer en su propio proceso svchost.exe separado.

La próxima vez que Windows Update se vuelva loco, su uso de recursos es visible de inmediato en el Administrador de tareas, e incluso puede eliminarse usando "Finalizar proceso" (aunque no se recomienda para servicios más críticos).

Si el servicio no se inicia, revise los pasos anteriores e intente nuevamente, o intente revertir sus cambios, mientras recupera la advertencia en la parte superior. :-)

Søren Løvborg
fuente