اتمام سرویسهایی که در حالت Stopping میباشند
برخی اوقات پیش میاد که یک سرویس ویندوز رو میخواید با استفاده از .net framework به حالت stop در بیارید اما در حالت Stopping گیر میکنه و هرگز Stop نمیشه.در این وضعیت نمیشه هیچ تغییری در سرویس داد،تنها راه terminate کردن سرویس و راه اندازی مجدد میباشد.
مشکل با یک Restart حل میشه اما بعضی اوقات که سرور زیر بار باشه امکان Restart فراهم نیست و یک Restart که به معنی downtime حدودا ۷ تا ۱۰ دقیقه ای هست باعث یک زیان مالی بزرگ میشه.
برای kill کردن اینجور سرویسها کافیه مراحل زیر رو پیگیری کنید:
۱- به command-prompt رفته و مشخصات سرویس رو با استفاده از دستور زیر بدست بیارید:
sc queryex mssql$sql2005
نتیجه ای شبیه زیر باید داشته باشید:
SERVICE_NAME: mssql$2005
TYPE : ۱۰ WIN32_OWN_PROCESS
STATE : ۳ STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : ۰ (۰×۰)
SERVICE_EXIT_CODE : ۰ (۰×۰)
CHECKPOINT : ۰×۰
WAIT_HINT : ۰×۰
PID : ۱۵۹۸۴
FLAGS :
میبینید که سرویس در حالت Stop_Pending گیر کرده .در اطلاعت بالا شماره این پردازش که در بخش PID نمایش داده شده برای ما اهمیت داره.
۲- با استفاده از فرمان زیر این سرویس رو خاتمه بدید.
taskkill /PID 15984 /F
توجه کنید از این روش فقط برای سرویسهایی که در حالت معمول امکان Start,Stop دارن استفاده نکنید.
ابتدا بدون پارامتر f/ استفاده کنید،اگر نتیجه نداد بعد از اون استفاده کنید.
از این روش برای سرویسهایی که flagهای NOT-STOPPABLE و یا IGNORES_SHUTDOWN رو دارند استفاده نکنید.