27 November 2012

Killare un processo in “arresto in corso” sui sistemi Windows

Mi è capitato oggi di dover litigare con un processo su un server Windows 2008 che, dopo essere stato ritenuto (giustamente) colpevole del blocco della Console “Symantec Endpoint Protection”, ha deciso di freezarsi in quel fastidioso stato che solitamente ci impone un bel riavvio del server.

Essendo tuttavia il server in produzione e non recando il processo bloccato nessun disservizio all’utenza, ho ritenuto eccessivo un reboot a metà mattina.

In sostanza, un metodo per forzare l’arresto di un servizio bloccato in “arresto in corso” o “stop pending” è il seguente:

Anzitutto è necessario il PID del processo da killare, lo possiamo trovare agilmente tramite la console “services.msc”, aprendo le proprietà del servizio bloccato, ne ho aperto uno a caso evidenziando il nome processo univocamente assegnato dal sistema:



Aprire quindi un prompt dei comandi (mi raccomando di usare un account con privilegi di amministrazione), e digitare la seguente riga:

sc queryex "[nomeservizio]"

Appariranno tutta una serie di informazioni carine, tra cui STATO (che sarà “ARRESTO IN CORSO” o “STOP PENDING”) e PID.

Ora digitiamo:

taskkill /F /PID [pid_servizio]

E come per magia il servizio si stopperà.
Per esperienza personale ho riavviato il servizio stesso dopo pochi istanti senza rilevare problema alcuno, e risolvendo anzi il problema iniziale.

Nota importante: verificate che tutti i servizi dipendenti dal servizio in questione siano ancora avviati perchè un kill brutale del servizio padre potrebbe portare alla morte dei servizi figli, senza che il sistema avverta in alcun modo l’utente.

Un sentito ringraziamento per la dritta al collega Cillo.



Testato su Windows Server 2003.
Trovato qiu.