Isolar o serviço hospedado (svchost.exe) em seu próprio processo


13

Como muitos superusuários provavelmente já sabem, svchost.exe é usado pela Microsoft para hospedar vários serviços do Windows em um único processo, com um processo por grupo de serviços.

No Windows 7 (e posterior?), É possível clicar com o botão direito do mouse em um processo svchost.exe específico no Gerenciador de tarefas e selecionar "Ir para o (s) serviço (s)" para ver os serviços em execução "dentro" dele. Em todas as versões do Windows, o Process Explorer também pode ser usado.

No entanto, isso não permite ver, por exemplo, qual serviço específico está fixando a CPU em 100% ou usando 700 MB de memória. Pode-se parar manualmente os serviços no mesmo grupo e usar o processo de eliminação, mas é entediante, especialmente se o problema ocorrer apenas de forma intermitente.

A Microsoft presumivelmente tem um bom motivo para agrupar serviços como esse (reduzindo a sobrecarga por processo, talvez?), Mas existe uma maneira de forçar um serviço específico a ser executado isolado em seu próprio svchost.exe?

Respostas:


16

Não, a maneira correta é executar este comando:

sc configwuauserv type= own

isso configura para executar o Windows Update em seu próprio processo. Para reverter isso, execute

sc config wuauserv type= share

de um prompt de comando com direitos de administrador . Isso altera o valor da configuração type. Se type é 0x20um processo de grupo , se o valor 0x10é um processo próprio .

Desde a Atualização do Windows 10 Creators (Versão 1703, Compilação 15063), o Windows faz isso sozinho se você tiver RAM suficiente .


1

A única maneira que eu sei é através de hackers no registro. O aviso de isenção usual de edição do banco de dados do registro se aplica (ele pode destruir qualquer coisa da instalação do Windows para toda a estrutura do espaço-tempo).

O exemplo a seguir isola o serviço Windows Update ( wuauserv), que é conhecido por se comportar mal e usar recursos excessivos. O método foi testado apenas no Windows 7 .

  1. Inicie o regedit.exe (Editor do Registro) e navegue até

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

    Essa chave contém uma subchave para cada grupo que contém configurações de grupo, bem como um valor REG_MULTI_SZ para cada grupo que lista os serviços no grupo.

  2. Procure na subchave o grupo atual do serviço de destino (neste exemplo netsvcs:) e crie uma nova subchave com um nome adequado e conteúdo idêntico. Lembre-se de observar os tipos de valor, bem como o conteúdo.

  3. Crie um valor REG_MULTI_SZ nomeado após o novo grupo, contendo uma única linha única com o nome do serviço; e remova o nome do serviço do seu grupo existente REG_MULTI_SZ.

  4. Em seguida, navegue até a subchave de serviço de destino abaixo HKLM\SYSTEM\CurrentControlSet\services. Neste exemplo:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Edite o ImagePathvalor e altere o nome do grupo depois -kpara o novo nome do grupo.

  6. Reinicie o serviço de destino (por exemplo, usando a guia Serviços no Gerenciador de tarefas ou via services.msc) e ele deve aparecer em seu próprio processo svchost.exe separado.

Na próxima vez em que o Windows Update estiver esgotado, seu uso de recursos ficará imediatamente visível no Gerenciador de Tarefas e poderá ser morto com o uso de "Finalizar Processo" (embora não seja recomendado para serviços mais críticos).

Se o serviço falhar ao iniciar, reveja as etapas acima e tente novamente ou tente reverter suas alterações, lembrando o aviso na parte superior. :-)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.