Elimine un servicio de Windows que se atasca al detenerse o iniciarse
Cómo eliminar manualmente un proceso de servicio de Windows que se apila en "
Stopping" o "
Starting" ¿estado? La mayoría de los administradores de Windows se han enfrentado a un problema cuando intentan iniciar/detener/reiniciar un servicio, pero se atasca con el estado Deteniendo (o Iniciando). No podrá detener este servicio desde la Consola de administración de servicios (
services.msc), ya que todos los botones de control de este servicio quedan inactivos (atenuados). La forma más sencilla es reiniciar Windows, pero no siempre es aceptable. Echemos un vistazo a formas alternativas, que permiten eliminar por la fuerza un servicio o proceso de Windows atascado sin reiniciar el sistema.
Si dentro de los 30 segundos después de intentar detener el servicio, no se detiene, Windows muestra este mensaje:
Windows Could not stop the xxxxxx service on Local Computer
Error 1053: The service did not respond in a timely fashion.El tiempo de espera que espera el administrador de control de servicios para que un servicio se inicie o se detenga se puede cambiar mediante el parámetro de registro ServicesPipeTimeout. Si el servicio no se inicia dentro del tiempo de espera especificado, Windows envía un error al Visor de eventos (ID de evento: 7000, 7009, 7011, se alcanzó un tiempo de espera de 30000 milisegundos). Puede aumentar este tiempo de espera a 60 segundos, por ejemplo:
reg add HKLM\SYSTEM\CurrentControlSet\Control /v ServicesPipeTimeout /t REG_SZ /d 600000 /fEsto es útil cuando se inician/detienen servicios pesados que no tienen tiempo suficiente para finalizar correctamente todos los procesos y cerrar los archivos (por ejemplo, MS SQL Server).
Si intenta detener dicho servicio desde el símbolo del sistema:
net stop wuauserv, aparece un mensaje:
The service is starting or stopping. Please try again later.o :
Windows could not stop the Service on Local Computer.
[SC] ControlService Error 1061: The service cannot accept control messages at this time.¿Cómo Forzar la Eliminación de un Servicio de Windows Atascado Usando TaskKill?
La forma más sencilla de detener un servicio atascado es utilizar la herramienta de línea de comandos taskkill integrada. En primer lugar, debe encontrar el PID (identificador de proceso) del servicio. Como ejemplo, tomemos el servicio de actualización de Windows. Su nombre de sistema es
wuauserv(puede comprobar el nombre en las propiedades del servicio en el
services.mscconsola).
Es muy común que el servicio del instalador de módulos de Windows se cuelgue cuando se reinicia el servidor, especialmente después de instalar actualizaciones en Windows Server 2012 R2 y 2016.
Importante. Ser atento. La terminación forzada de los servicios críticos de Windows puede provocar una BSOD o un reinicio inesperado del sistema.
Ejecute este comando en el símbolo del sistema elevado (es importante, o aparecerá un error de acceso denegado):
sc queryex wuauservEn nuestro caso, el PID del servicio wuauserv es 9186.
Para forzar la eliminación de un proceso atascado con el PID 9186, ejecute el comando:
taskkill /PID 9168 /FSUCCESS: The process with PID 9168 has been terminated.Este comando terminará por la fuerza el proceso de servicio. Ahora puede iniciar el servicio con el
sc start servicenamecomando o a través de la consola de administración de servicios
Puede detener un servicio bloqueado de manera más elegante sin verificar manualmente el PID del proceso de servicio. La herramienta taskkill tiene la opción /FI, que le permite usar un filtro para seleccionar los servicios o procesos necesarios. Puede eliminar un servicio específico con el comando:
taskkill /F /FI "SERVICES eq wuauserv"O puede omitir el nombre del servicio y eliminar todos los servicios en un estado colgado con el comando:
taskkill /F /FI "status eq not responding"Después de eso, el servicio que está apilado en el estado Stopping debería detenerse.
También puede usar la utilidad taskkill para forzar la detención de los servicios colgados en una computadora remota:
taskkill /S mun-fs01 /F /FI "SERVICES eq wuauserv"Forzar la detención de un servicio de Windows atascado con PowerShell
También puede usar PowerShell para forzar la detención del servicio. Usando el siguiente comando, puede obtener una lista de servicios en el estado de Detención:
Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}O en el estado inicial:
Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'start pending'}El cmdlet Stop-Process permite finalizar los procesos de todos los servicios encontrados. El siguiente script de PowerShell finalizará todos los procesos de servicio atascados en Windows:
$Services = Get-WmiObject -Class win32_service -Filter "state = 'stop pending'"
if ($Services) {
foreach ($service in $Services) {
try {
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
}
catch {
Write-Warning -Message "Error. Error details: $_.Exception.Message"
}
}
}
else {
Write-Output "No services with 'Stopping'.status"
}
Debes usar el
Get-CimInstanceen vez de
Get-WmiObjectcmdlet en el nuevo PowerShell Core 6.x/7.x. Reemplace el primer comando del script con:
$Services = Get-CimInstance -Class win32_service | where-Object state -eq 'stop pending'Análisis de las cadenas de espera en servicios colgados mediante ResMon
Puede detectar el proceso que causó que el servicio se bloquee usando resmon.exe (Monitor de recursos).
En la ventana del Monitor de recursos, vaya a la pestaña CPU y busque el proceso de servicio colgado;
Seleccione el elemento Analizar cadena de espera del menú contextual;
En la nueva ventana, lo más probable es que vea que su proceso está esperando otro proceso. Finaliza el proceso. Si está esperando el svchost.exe u otro proceso del sistema, no necesita terminarlo. Trate de analizar la cadena de espera para este proceso. Encuentre el PID del proceso que su svchost.exe está esperando y elimínelo.
Matar un servicio colgado usando Process Explorer
Incluso el administrador local no puede terminar algunos procesos que se ejecutan bajo la cuenta del SISTEMA. El hecho es que la cuenta de administrador simplemente no tiene permisos en algunos procesos o servicios. Para detener dicho proceso (servicio), debe otorgar permisos para el servicio (proceso) al grupo de administradores locales y luego eliminarlos. Para ello necesitaremos dos pequeñas herramientas: psexec.exe y ProcessExplorer (disponibles en la web de Microsoft).
Para iniciar ProcessExplorer con los privilegios del sistema (runas SYSTEM), use el comando:
PSExec -s -i ProcExp.exeEn la lista de procesos de Process Explorer, busque el proceso de servicio atascado y abra sus propiedades;
Vaya a la pestaña Servicios, busque su servicio y haga clic en el botón Permisos;
Otorgue el derecho Control total en los permisos de servicio para el grupo Administradores. Guarde los cambios;
Ahora intente detener el proceso de servicio.
Tenga en cuenta que el permiso en el servicio se otorga temporalmente hasta que se reinicie. Para otorgar permisos permanentes en el servicio, siga el artículo Establecer permisos en un servicio de Windows.







