Isolare il servizio ospitato (svchost.exe) nel proprio processo


13

Come ormai molti superuser probabilmente sanno, svchost.exe è utilizzato da Microsoft per ospitare più servizi Windows in un unico processo, con un processo per gruppo di servizi.

In Windows 7 (e versioni successive?), È possibile fare clic con il pulsante destro del mouse su uno specifico processo svchost.exe in Task Manager e selezionare "Vai a servizi" per vedere i servizi in esecuzione "al suo interno". In tutte le versioni di Windows è possibile utilizzare anche Process Explorer .

Tuttavia, ciò non consente di vedere, ad esempio, quale particolare servizio sta bloccando la CPU al 100% o utilizzando 700 MB di memoria. È possibile interrompere manualmente i servizi nello stesso gruppo e utilizzare il processo di eliminazione, ma è noioso, soprattutto se il problema si verifica solo in modo intermittente.

Microsoft ha presumibilmente una buona ragione per raggruppare servizi come questo (riducendo il sovraccarico per processo, forse?), Ma c'è un modo per forzare l'esecuzione di un servizio specifico nel proprio svchost.exe?

Risposte:


16

No, il modo corretto è eseguire questo comando:

sc configwuauserv type= own

questo configura per eseguire Windows Update nel proprio processo. Per ripristinare questo, eseguire

sc config wuauserv type= share

da un prompt dei comandi con diritti di amministratore . Questo cambia il valore di impostazione type. Se type è 0x20, è un processo di gruppo , se il valore è 0x10è un processo proprio .

Dall'aggiornamento di Windows 10 Creators (versione 1703, build 15063), Windows lo fa da solo se si dispone di RAM sufficiente .


1

L'unico modo che conosco è tramite l'hacking del registro. Si applica il solito disclaimer di modifica del database del registro (potrebbe distruggere qualsiasi cosa dall'installazione di Windows all'intero tessuto dello spaziotempo).

L'esempio seguente isola il servizio Windows Update ( wuauserv), che è noto per comportarsi in modo errato e utilizzare risorse eccessive. Il metodo è stato testato solo su Windows 7 .

  1. Avviare regedit.exe (Editor del Registro di sistema) e accedere a

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

    Questa chiave contiene una sottochiave per ciascun gruppo contenente le impostazioni del gruppo, nonché un valore REG_MULTI_SZ per ciascun gruppo che elenca i servizi nel gruppo.

  2. Cerca nella sottochiave il gruppo corrente del servizio di destinazione (in questo esempio:) netsvcs, quindi crea una nuova sottochiave con un nome adatto e contenuti identici. Ricorda di osservare i tipi di valore e i contenuti.

  3. Creare un valore REG_MULTI_SZ che prende il nome dal nuovo gruppo, contenente una sola riga con il nome del servizio; e rimuovi il nome del servizio dal suo gruppo esistente REG_MULTI_SZ.

  4. Quindi, passare alla sottochiave del servizio di destinazione in basso HKLM\SYSTEM\CurrentControlSet\services. In questo esempio:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Modifica il ImagePathvalore e cambia il nome del gruppo dopo -kcon il nuovo nome del gruppo.

  6. Riavvia il servizio di destinazione (ad es. Utilizzando la scheda Servizi in Task Manager o tramite services.msc) e dovrebbe apparire nel suo processo svchost.exe separato.

La prossima volta che Windows Update funziona, il suo utilizzo delle risorse è immediatamente visibile in Task Manager e può anche essere ucciso usando "Termina processo" (non consigliato per servizi più critici, però).

Se il servizio non si avvia, rivedere i passaggi precedenti e riprovare, oppure provare a ripristinare le modifiche, mentre si richiama l'avviso in alto. :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.