如何在 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。然後我們可以重新啟動伺服器當事情變得更安靜時,可惜那沒有用。
儘管您似乎已經明白了這一點,但問題是該程序正在核心上等待某些東西。(這通常是驅動程序級別的問題,但並非總是如此。)終止此類程序的唯一方法是解除安裝核心,當然,如果不重新啟動就無法做到這一點。
可能值得嘗試一些核心調試(這個工具在 2008 R2 上工作嗎?)以希望縮小具體原因或衝突,但您處理問題的選擇是忍受它,或者重新啟動伺服器以消除它。
你有沒有考慮過和它一起生活的原因?如果它只是一個殭屍程序,並且不會影響任何東西,我認為您可以推遲重新啟動,直到維護視窗或更合適的時間。通常我的方法是,當殭屍或掛起的程序沒有乾擾任何東西時——在下一個更新檔週期或計劃的維護視窗中處理它。