如何終止 Windows 2008R2 上掛起的服務

如何終止 Windows 2008R2 上掛起的服務

我有一個運行 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。時,可惜這不行。

答案1

儘管您似乎已經弄清楚了這一點,但問題是該進程正在核心上等待某些東西。 (這通常是驅動程式層級的問題,但並非總是如此。)終止此類進程的唯一方法是卸載內核,當然,如果不重新啟動就無法做到這一點。

可能值得嘗試一些內核調試(這個工具可以在 2008 R2 上運作嗎? )希望縮小具體原因或衝突的範圍,但處理問題的選擇要么忍受它,要么重新啟動伺服器以消除它。

您有什麼理由沒有考慮過接受它嗎?如果它只是一個殭屍進程,並且不會影響任何內容,我認為您可以推遲重新啟動,直到維護視窗或更合適的時間。通常我的方法是,當殭屍或掛起進程不干擾任何事情時 - 在下一個補丁週期或計劃的維護視窗期間處理它。

相關內容