终止停止或者无响应的Windows服务

时间:2020-01-09 10:46:40  来源:igfitidea点击:

如何手动强制停止在"正在停止"或者"未响应"时挂起的挂起的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服务的权限一文。