如何在 Windows 2008R2 上终止挂起的服务

Kev*_*Kev 9 windows windows-service windows-server-2008-r2

我有一台运行 NSClient++ 的 Windows 2008R2 服务器。出于某种原因,该服务陷入了困境,并停止了对 Nagios 投票的响应。

当我尝试重新启动服务时,服务管理器需要很长时间才能尝试终止服务,然后最终放弃并显示“服务响应时间过长”的消息。但是……它还启动了一个新的服务实例。

如果我查看任务管理器,或者tasklist我现在可以看到两个nsclient++.exe正在运行的实例。

我试图使用以下方法杀死这两个:

  • 右键单击并在任务管理器中“结束进程” - 假装杀死进程并报告没有错误(例如拒绝访问)但进程仍然存在。

  • taskkill /PID <proc id> /F- 报告SUCCESS: The process with PID 6672 has been terminated.但进程仍在运行。

  • 下载 SysInternals PsTools 并运行pskill <PID>- 报告Process <PID> killed- 但该过程仍然存在。

  • 执行at hh:mm pskill <PID>pskill作为SYSTEM帐户执行此操作...并且您猜到该进程仍在运行。

以上所有内容均在管理员命令提示符下运行。

除了不太理想的重启(该机器是一个相当关键的生产服务器),我还能尝试什么?

服务器没有任何资源压力(内存、CPU、磁盘等),并且在其上运行的所有内容都运行良好。

快速查看 SysInternals Process Explorer 中的线程选项卡显示所有这些nsclient++.exe实例都被卡在卸载中:

在此处输入图片说明

顺便说一句,我还尝试杀死这些僵尸(?)进程(使用 TCPView)的所有 TCP 连接,希望我可以启动一个新实例并且它能够获取端口 5666。然后我们可以重新启动服务器当事情变得更安静时,但可惜没有用。

Hop*_*00b 3

尽管您似乎已经弄清楚了这一点,但问题是该进程正在内核上等待某些东西。(这通常是驱动程序级别的问题,但并非总是如此。)终止此类进程的唯一方法是卸载内核,当然,如果不重新启动就无法做到这一点。

可能值得尝试一些内核调试(这个工具在 2008 R2 上工作吗?),希望缩小具体原因或冲突的范围,但处理问题的选择要么忍受它,要么重新启动服务器以消除它。

您有什么理由没有考虑过接受它吗?如果它只是一个僵尸进程,并且不会影响任何内容,我认为您可以推迟重新启动,直到维护窗口或更合适的时间。通常我的方法是,当僵尸或挂起进程不干扰任何事情时 - 在下一个补丁周期或计划的维护窗口期间处理它。