终止停止或者无响应的Windows服务
如何手动强制停止在"正在停止"或者"未响应"时挂起的挂起的Windows服务进程?大多数Windows管理员在尝试停止(重新启动)服务时都遇到了问题,但该服务始终处于"正在停止"状态。我们将无法从服务管理控制台(services.msc)停止该服务,因为该服务的所有控制按钮均处于非活动状态。最简单的方法是重新启动Windows,但这并不总是可以接受的。让我们考虑一种替代方法,该方法允许强制杀死卡住的Windows服务或者进程,而无需重新启动系统。
如果尝试停止服务后30秒钟内该服务没有停止,则Windows将显示以下消息:
Windows无法在本地计算机上停止xxxxxx服务错误1053:服务未及时响应。
如果我们尝试从命令提示符处停止此类服务:
net stop wuauserv
,出现一条消息:
The service is starting or stopping. Please try again letter.
如何使用TaskKill终止挂起的Windows服务进程?
停止卡住服务的最简单方法是使用" taskkill"。首先,我们需要找到服务的" PID"(进程标识符)。以Windows Update服务为例,其系统名称为
wuauserv
(我们可以在services.msc控制台的服务属性中检查名称)。
服务器重启时,Windows模块安装程序服务经常会发生此问题,尤其是在Windows Server 2012 R2/2008 R2上安装更新之后。
重要。留心。强制关闭关键Windows服务可能会导致BSOD或者系统意外重启。
在提升权限的命令提示符中运行以下命令(这很重要,否则将显示拒绝访问错误):
sc queryex wuauserv
在本例中,wuauserv服务的PID为816. 要强制停止PID 816挂起的进程,请运行以下命令:
taskkill /PID 816 /F
成功:PID 816的过程已终止。
我们可以更优雅地停止挂起的服务,而无需手动检查服务PID。 taskkill实用程序具有/ FI选项,该选项允许我们使用过滤器选择必要的服务或者进程。我们可以使用以下命令关闭特定服务:
taskkill /F /FI "SERVICES eq wuauserv"
或者,我们可以完全跳过服务名称,并使用以下命令杀死处于挂起状态的所有服务:
taskkill /F /FI "status eq not responding"
此后,挂起在"停止"状态的服务应停止。
PowerShell:以停止状态停止Windows服务
我们还可以使用PowerShell强制停止服务。使用以下命令,我们可以获取处于"正在停止"状态的服务列表:
Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}
" Stop-Process" cmdlet允许终止所有找到的服务的进程。让我们将两个操作组合成一个循环,并获得一个脚本,该脚本自动终止被卡住的服务的所有进程:
$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" }
使用Resmon识别挂起进程
我们可以使用" resmon"(资源监视器)检测导致服务冻结的进程。
- 在"资源监视器"窗口中,转到" CPU"选项卡并找到挂起的服务进程。
- 从上下文菜单中选择"分析等待链"项目;
- 在新窗口中,我们很可能会看到进程正在等待另一个进程。结束过程。如果我们正在等待svchost.exe或者其他系统进程,则无需终止它。尝试分析此过程的等待链。找到svchost.exe正在等待的进程的PID,并杀死它。
进程浏览器:杀死在SYSTEM上下文中运行的已挂起的进程
即使是本地管理员也无法终止某些在SYSTEM上下文中运行的进程。事实是,管理员帐户仅对某些进程或者服务没有权限。要停止此类进程(服务),我们需要将服务(进程)的权限授予本地Administrators组,然后终止它们。为此,我们将需要两个小工具:psexec.exe和ProcessExplorer(可从Microsoft网站获得)。
- 要以系统特权(runas SYSTEM)运行ProcessExplorer,请按以下方式运行实用程序:
PSExec -s -i ProcExp.exe
- 在"进程资源管理器"进程列表中,找到卡住的服务进程并打开其属性;
- 转到"服务"标签,找到服务,然后单击"权限"按钮;
- 在"管理员"组的服务权限中授予"完全控制"权限。 保存更改;
- 现在尝试停止服务过程。请注意,在重新启动服务之前,将暂时授予该服务的权限。要授予对服务的永久权限,请遵循设置Windows服务的权限一文。