Я думаю, что большинство пользователей встречались с такой проблемой, как зависание служб в Windows, причем, попытка принудительного завершения такой службы не увенчалась успехом, и она весит в режиме “Stopping”. Из графического интерфейса перезапустить или принудительно завершить службу тоже не удается, а перезагрузка самого сервера, в нашем случае компьютера, не всегда может быть допустимым.
Сейчас мы рассмотрим способ, который поможет вам принудительно завершить процесс, который завис, при этом, само устройство перезапускать не нужно.
Как принудительно завершить зависшую службу?
Итак, как только пройдет 30 секунд и видно, что служба не остановилась, то Windows выведет следующее сообщение:
Не удалось остановить службу xxxxxxx Windows на локальном компьютере. Ошибка 1053. Служба не ответила на запрос своевременно.
Быстро и без усилий завершить работу зависшего процесса можно при помощи утилиты taskkill. Перед этим вам нужно будет определить PID процесса (службы). В пример мы будем использовать службу Windows Update, системное имя процесса – wuauserv.
Внимание! Если вы завершите важный процесс, то это может привести к перезагрузке системы или BSOD (экран смерти).
Теперь открываем командную строку с правами админа, если так не сделать, то может выйти ошибка. В командную строку вводим следующее:
sc queryex wuauserv
Таким образом, мы узнали PID службы – 708
Теперь, для принудительного завершения процесса с полученным PID пропишем такую команду:
taskkill /PID 708 /F
Появится сообщение, что служба “Центр обновлений Windows” завершена. Можно потом вернуться в управление службами и там снова запустить процесс, либо вообще его удалить, если вы не пользуетесь им.
Есть еще один метод принудительного завершения процесса, при этом, не нужно узнавать PID. В этом деле нам поможет уже знакомая утилита PowerShell. Запускаем ее от имени администратора.
Следующая команда поможет нам выявить службы, которые находятся в состоянии stopping:
Get-WmiObject -Class win32_service | Where-Object {$_.state -eq ‘stop pending’}
Теперь нам нужно завершить процесс для найденных нами служб, в этом нам поможет Stop-Process. C помощью следующего скрипта, все подвисшие в системе службы будут завершены:
$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”
}
На этом все, сегодня мы смогли завершить процессы, которые у нас не получалось завершить, например, с помощью диспетчера устройств или из графической оболочки.