Perché Windows 11 esegue decine di svchost.exe e cosa fanno

Windows 11 esegue decine di processi svchost.exe per gestire i servizi di sistema. Ecco cosa fanno, come identificarli e controllarne i consumi.

Aprendo il Task Manager (Gestione attività, in italiano) di Windows 11 e passando alla scheda Dettagli, può capitare di trovare decine di processi con lo stesso nome: svchost.exe. Alcuni occupano pochi megabyte di memoria, altri ne utilizzano decisamente di più; molti operano con privilegi SYSTEM (colonna Nome utente), altri risultano associati agli account LOCAL SERVICE, NETWORK SERVICE oppure all’utente che ha effettuato l’accesso.

Processi svchost.exe Windows 11

A prima vista, una quantità così elevata di processi identici potrebbe sembrare un’anomalia oppure il sintomo una cattiva gestione delle risorse. In realtà, la moltiplicazione delle istanze di svchost.exe deriva da una precisa scelta architetturale di Microsoft, introdotta diversi anni fa, e mantenuta in Windows 11.

Cos’è svchost.exe e perché Windows ne ha bisogno

Il nome svchost.exe deriva da Service Host, letteralmente “host dei servizi”. Si tratta di un eseguibile di sistema che permette a Windows di ospitare ed eseguire servizi implementati attraverso librerie DLL (Dynamic Link Library).

Un servizio Windows non deve necessariamente corrispondere a un programma eseguibile autonomo: può essere implementato come una DLL contenente il codice necessario per svolgere una specifica funzione.

Una libreria DLL, tuttavia, non costituisce di per sé un processo autonomo: per eseguire il codice che contiene occorre caricarla nello spazio di indirizzamento di un processo. L’eseguibile svchost.exe svolge proprio tale funzione: mette a disposizione un processo nel quale Windows può caricare e inizializzare uno o più servizi.

Per esempio, il sistema operativo deve gestire continuamente operazioni come la risoluzione dei nomi DNS, l’assegnazione degli indirizzi IP, le notifiche, il rilevamento delle periferiche, le comunicazioni di rete e il coordinamento degli aggiornamenti.

Molte di queste attività dipendono proprio da servizi eseguiti in background: non richiedono l’apertura di una finestra, non compaiono tra le applicazioni aperte e devono continuare a funzionare indipendentemente dai programmi utilizzati.

Come funziona Service Control Manager (SCM)

Si chiama SCM il componente responsabile dell’avvio, dell’arresto e della gestione dei servizi. Decide quali servizi avviare in base alla configurazione, alle dipendenze e agli eventi che ne richiedono l’attivazione.

Secondo la documentazione Microsoft incentrata proprio sui servizi di sistema, Windows distingue formalmente due modalità: SERVICE_WIN32_OWN_PROCESS, nella quale il servizio utilizza un proprio processo, e SERVICE_WIN32_SHARE_PROCESS, che consente la condivisione del processo ospitante. Non tutti i servizi, quindi, utilizzano svchost.exe, e non tutti quelli che lo utilizzano condividono necessariamente lo stesso processo.

Microsoft ha abbandonato il raggruppamento di numerosi servizi all’interno dello stesso processo per privilegiare l’isolamento, la stabilità e una gestione più granulare delle risorse.

Perché in Windows 11 ci sono così tanti svchost.exe: la modifica introdotta da Microsoft

Prima di Windows 10 Creators Update, versione 1703, distribuito nel 2017, il sistema operativo Microsoft tendeva a raggruppare numerosi servizi all’interno di un numero relativamente limitato di processi svchost.exe.

Era una soluzione ragionevole soprattutto per i computer con poca RAM: più servizi potevano condividere parte delle risorse del processo ospitante, limitando il consumo complessivo di memoria.

Il rovescio della medaglia aveva però a che fare con il tema dell’affidabilità. Se un servizio provocava un errore irreversibile nel processo condiviso, poteva causare l’interruzione anche degli altri servizi presenti nello stesso processo.

Con Windows 10 1703, Microsoft ha introdotto una modifica sostanziale: sui computer dotati di oltre 3,5 GB di RAM, molti servizi precedentemente raggruppati hanno iniziato a essere eseguiti in istanze di svchost.exe separate.

L’isolamento, comunque, non è assoluto. Alcuni servizi devono continuare a condividere lo stesso processo per ragioni di compatibilità, dipendenze o progettazione. Microsoft cita, per esempio, il Base Filtering Engine (BFE) e il servizio Windows Firewall (MpsSvc), i servizi RPC ed altri ancora.

Cosa significano i parametri -k, -s e -p di svchost.exe

Senza abbandonare il Task Manager, provate adesso a cliccare con il tasto destro sulle intestazioni della scheda Dettagli, scegliete Seleziona colonne quindi spuntate la casella Riga di comando.

Riga di comando svchost.exe Windows 11

Per ogni occorrenza di svchost.exe, è possibile osservare istruzioni simili alla seguente:

C:\Windows\System32\svchost.exe -k netsvcs -p -s Schedule

La sintassi rivela informazioni importanti sul processo:

  • -k identifica il gruppo di hosting, nell’esempio netsvcs. Non rappresenta il nome di un particolare servizio, bensì una configurazione che Windows utilizza per organizzare i servizi e i relativi requisiti di esecuzione.
  • -s, seguito da Schedule, identifica invece il servizio che quella specifica istanza deve ospitare. Schedule è il nome interno del servizio Utilità di pianificazione.
  • -p è un parametro interno legato alla configurazione di esecuzione di svchost.exe e alle impostazioni di protezione del processo.

Un’altra riga di comando potrebbe apparire così:

C:\Windows\System32\svchost.exe -k NetworkService -p -s Dnscache

In questo caso, il servizio identificato da Dnscache si occupa della cache DNS e delle funzioni correlate alla risoluzione dei nomi di dominio.

I parametri consentono dunque di capire che cosa stia effettivamente ospitando il processo, ma non è opportuno considerarli una prova della sua autenticità: anche un programma malevolo può utilizzare argomenti apparentemente plausibili.

Come scoprire quali servizi esegue ogni svchost.exe

Windows 11 offre diversi strumenti per esaminare le associazioni tra processi e servizi senza installare applicazioni aggiuntive.

Il metodo più immediato nel fare clic con il tasto destro su una delle istanze di svchost.exe nella scheda Dettagli quindi scegliere la voce Vai ai servizi, quando disponibile, per individuare il servizio o i servizi associati al relativo PID (Process Identifier).

Il PID è particolarmente utile perché distingue istanze differenti dello stesso eseguibile: vari processi denominati svchost.exe, infatti, hanno generalmente identificativi diversi e possono eseguire operazioni completamente indipendenti.

La scheda Processi del Task Manager offre anche una rappresentazione più comprensibile: molte istanze compaiono come Host servizio, seguite dal nome del servizio corrispondente.

Ancora più semplicemente, si può aprire il Prompt dei comandi e incollare quanto segue per ottenere l’elenco delle istanze attive di svchost.exe, i rispettivi PID e i servizi Windows associati:

tasklist /svc /fi "imagename eq svchost.exe"

Uno script per associare consumi di RAM, CPU e servizi

Lo script PowerShell seguente recupera i servizi attivi, li raggruppa in base al PID e associa ciascun gruppo al relativo processo svchost.exe.

In questo modo è possibile identificare rapidamente, per esempio, un processo che occupa molta memoria e scoprire quale servizio ospita. Un elevato consumo di RAM non significa automaticamente che il servizio presenti un problema. Può dipendere da cache, buffer, operazioni temporanee o dal carico che sta effettivamente gestendo.

Lo script fornisce inoltre misure relative al processo ospitante nel suo complesso, non consumi separati per ciascun servizio quando più servizi condividono il medesimo PID.

$servizi = Get-CimInstance Win32_Service |
    Where-Object { $_.ProcessId -gt 0 } |
    Group-Object ProcessId -AsHashTable -AsString

Get-Process svchost | ForEach-Object {
    $p = $_
    $associati = $servizi[[string]$p.Id]

    [PSCustomObject]@{
        PID = $p.Id
        RAM_MB = [math]::Round($p.WorkingSet64 / 1MB, 1)
        CPU_Secondi = [math]::Round($p.CPU, 1)
        Servizi = ($associati.Name -join ', ')
    }
} | Sort-Object RAM_MB -Descending |
Format-Table -AutoSize -Wrap

Il valore CPU_Secondi restituito dallo script indica il tempo di CPU cumulativo del processo, non la percentuale di CPU utilizzata in quel momento. Analogamente, RAM_MB indica il working set, che comprende anche pagine di memoria potenzialmente condivise.

Perché svchost.exe utilizza account SYSTEM, LOCAL SERVICE e NETWORK SERVICE

E cosa dire rispetto alla presenza di istanze svchost.exe avviate con identità differenti? Windows utilizza account di servizio integrati proprio per evitare che tutti i componenti operino con lo stesso insieme di privilegi:

  • LocalSystem (SYSTEM) rappresenta un’identità dotata di privilegi molto elevati sul computer locale. Diversi servizi fondamentali ne hanno bisogno per svolgere attività amministrative o interagire con componenti protetti.
  • LocalService dispone di privilegi locali più limitati. Quando accede a risorse remote, opera generalmente senza presentare credenziali di dominio privilegiate.
  • NetworkService mantiene privilegi locali limitati, ma può utilizzare l’identità del computer per autenticarsi presso altri sistemi di rete.

La scelta dell’identità risponde al principio del minimo privilegio: un servizio dovrebbe ottenere soltanto le autorizzazioni necessarie per svolgere il proprio compito.

Come verificare se tutti i processi svchost.exe sono autentici

La presenza di numerosi processi svchost.exe non è indizio di un porblema. Tuttavia, proprio perché il nome è comune e compare a più riprese nel Task Manager, un malware potrebbe utilizzarlo per nascondersi tra i normali componenti di Windows.

Un primo controllo consiste nel verificare da quale cartella viene effettivamente eseguito ciascun processo: il file di sistema originale risiede normalmente in C:\Windows\System32\svchost.exe. Sui sistemi Windows a 64 bit può essere presente anche la versione a 32 bit nella cartella C:\Windows\SysWOW64.

Un eseguibile con lo stesso nome avviato da directory come AppData, Temp o Downloads merita invece un approfondimento.

Per effettuare una verifica automatica, aprite PowerShell e incollate il comando seguente:

Get-CimInstance Win32_Process -Filter "Name='svchost.exe'" |
Select-Object ProcessId, ExecutablePath, CommandLine |
Format-Table -AutoSize -Wrap

PowerShell mostra il PID, il percorso completo dell’eseguibile e la riga di comando utilizzata per avviare ogni istanza. Per visualizzare le informazioni dei processi protetti o eseguiti con privilegi elevati, può essere necessario avviare PowerShell come amministratore; alcune informazioni possono comunque rimanere non accessibili.

Il controllo può essere completato verificando la firma digitale Microsoft associata all’eseguibile:

Get-AuthenticodeSignature "C:\Windows\System32\svchost.exe" |
Select-Object Status, @{Name='Firmatario';Expression={
    $_.SignerCertificate.Subject
}}

Il risultato dovrebbe normalmente riportare Valid nella colonna Status, con un certificato riconducibile a Microsoft.

È opportuno osservare che un file svchost.exe autentico e correttamente firmato non garantisce che il processo sia esente da compromissioni. Un aggressore potrebbe sfruttare un servizio legittimo o riuscire a eseguire codice malevolo al suo interno. La verifica della firma rappresenta quindi un primo filtro, non un’analisi di sicurezza definitiva.

Come scoprire se svchost.exe si collega a Internet e a quali server

Un’altra verifica particolarmente interessante riguarda le connessioni di rete effettuate dai processi svchost.exe. Non tutti i servizi Windows comunicano con Internet, ma molti lo fanno regolarmente per controllare gli aggiornamenti, verificare certificati digitali, sincronizzare informazioni o utilizzare funzionalità di rete.

Per individuare le connessioni TCP attive e associarle alle varie istanze di svchost.exe, si può utilizzare il seguente script PowerShell:

$servizi = Get-CimInstance Win32_Service |
    Where-Object { $_.ProcessId -gt 0 } |
    Group-Object ProcessId -AsHashTable -AsString

$pidSvchost = @(Get-Process svchost).Id

Get-NetTCPConnection -State Established |
Where-Object { $_.OwningProcess -in $pidSvchost } |
ForEach-Object {
    $conn = $_
    $associati = $servizi[[string]$conn.OwningProcess]

    [PSCustomObject]@{
        PID = $conn.OwningProcess
        Servizio = ($associati.Name -join ', ')
        IP_Remoto = $conn.RemoteAddress
        Porta_Remota = $conn.RemotePort
        IP_Locale = $conn.LocalAddress
        Porta_Locale = $conn.LocalPort
    }
} |
Sort-Object PID |
Format-Table -AutoSize -Wrap

Lo script mostra esclusivamente le connessioni TCP nello stato Established, ovvero quelle che risultano stabilite al momento del controllo. Per ogni connessione riporta il PID del processo, il nome del servizio correlato, l’indirizzo e la porta locale, oltre all’indirizzo IP e alla porta del sistema remoto.

Conclusioni

La presenza di decine di processi svchost.exe in Windows 11 non rappresenta un’anomalia né, di per sé, un inutile spreco di risorse. È soprattutto la conseguenza della scelta di Microsoft di separare numerosi servizi di sistema, migliorandone l’isolamento, la stabilità e la possibilità di individuare eventuali malfunzionamenti.

Più che concentrarsi sul numero di istanze presenti nel Task Manager, è quindi utile capire quali servizi ospitano e come utilizzano le risorse del computer.

I comandi e gli script PowerShell illustrati nel nostro articolo permettono di associare ogni processo ai servizi corrispondenti, verificarne il percorso e la firma digitale, analizzare il consumo di RAM e CPU e identificare le connessioni TCP attive.

L’importante è evitare di terminare i processi svchost.exe nel tentativo di velocizzare Windows: si rischia di interrompere servizi essenziali senza ottenere alcun beneficio concreto. Sono i comportamenti anomali, non il numero dei processi, a meritare un approfondimento.

Ti consigliamo anche

Link copiato negli appunti