¿Cómo detener manualmente por la fuerza un proceso de servicio de Windows bloqueado que se bloquea en «Deteniendo» o «No responde»? La mayoría de los administradores de Windows se han enfrentado a un problema, cuando intentan detener (reiniciar) un servicio, pero se atasca con el Parada estado. No podrá detener este servicio desde la Consola de administración de servicios (services.msc), ya que todos los botones de control para este servicio quedan inactivos. La forma más sencilla es reiniciar Windows, pero no siempre es aceptable. Consideremos una forma alternativa, que permite eliminar a la fuerza un servicio o proceso de Windows atascado sin reiniciar el sistema.
Si dentro de los 30 segundos posteriores a intentar detener el servicio, este no se detiene, Windows muestra este mensaje:
Windows no pudo detener el servicio xxxxxx en la computadora local
Error 1053: el servicio no respondió de manera oportuna.
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 letter.
¿Cómo terminar un proceso de servicio de Windows colgado usando TaskKill?
La forma más sencilla de detener un servicio atascado es utilizar Taskkill. En primer lugar, debe encontrar el PID (identificador de proceso) del servicio. Como ejemplo, tomemos el servicio Windows Update, su nombre de sistema es wuauserv
(puede verificar el nombre en las propiedades del servicio en la consola services.msc).
Importante. Ser atento. Un cierre forzado de los servicios críticos de Windows puede provocar un 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 wuauserv
En nuestro caso, el PID del servicio wuauserv es 816.
Para forzar la detención de un proceso colgado con el PID 816, ejecute el comando:
taskkill /PID 816 /F
ÉXITO: El proceso con PID 816 ha finalizado.
Puede detener un servicio colgado de forma más elegante sin comprobar manualmente el PID del servicio. La utilidad taskkill tiene la opción / FI, que le permite usar un filtro para seleccionar los servicios o procesos necesarios. Puede cerrar 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 esto, el servicio que se cuelga en el estado Deteniendo debería detenerse.
PowerShell: detener el servicio de Windows con estado de detención
También puede usar PowerShell para forzar la detención del servicio. Con el siguiente comando, puede obtener una lista de servicios en estado de detención:
Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}
La Proceso de parada cmdlet permite terminar los procesos de todos los servicios encontrados. Combinemos ambas operaciones en un bucle y obtengamos un script que finalice automáticamente todos los procesos de los servicios atascados:
$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"
}
Identificar un proceso de bloqueo con Resmon
Puede detectar el proceso que provocó la congelación del servicio utilizando el resmon (Monitor de recursos).
- En la ventana Monitor de recursos, vaya a la pestaña CPU y localice el proceso de servicio colgado;
- Seleccione el artículo Analizar cadena de espera desde el menú contextual;
- En la nueva ventana, probablemente verá que su proceso está esperando otro proceso. Termina el proceso. Si está esperando el svchost.exe u otro proceso del sistema, no es necesario que lo finalice. Intente analizar la cadena de espera para este proceso. Busque el PID del proceso que su svchost.exe está esperando y elimínelo.
Explorador de procesos: eliminación de un proceso colgado que se ejecuta en el contexto del sistema
Incluso el administrador local no puede terminar algunos procesos que se ejecutan en el contexto del SISTEMA. El hecho es que la cuenta de administrador simplemente no tiene permisos en algunos procesos o servicios. Para detener dicho proceso (servicios), debe otorgar permisos al servicio (proceso) al grupo de administradores local y luego finalizarlos. Para hacer esto, necesitaremos dos pequeñas herramientas: psexec.exe y Explorador de procesos (disponible en el sitio web de Microsoft).
- Para ejecutar ProcessExplorer con los privilegios del sistema (runas SYSTEM), ejecute la utilidad de esta manera:
PSExec -s -i ProcExp.exe
- En la lista de procesos del Explorador de procesos, busque el proceso de servicio atascado y abra sus propiedades;
- Ve a la Servicios pestaña, busque su servicio y haga clic en el Permisos botón;
- Otorgue el derecho de Control total en los permisos de servicio para el Administradores grupo. Guarde los cambios;
- Ahora intente detener el proceso de servicio.
Tenga en cuenta que el permiso en el servicio se otorga temporalmente, antes de su reinicio. Para otorgar permisos permanentes en el servicio, siga el artículo Establecer permisos en un servicio de Windows.
Artículos Interesantes
Contenido