درباره SVCHOST

این مقاله به شما نشان می دهد چگونه مشکل svchost.exe را در ویندوز حل کنید، زمانی که مقدار زیادی از رم RAM کامپیوتر شما را مصرف می کنئ

طبق گفته مایکروسافت: "svchost.exe نام نوعی process میزبان برای سرویس هایی است که از درون fileهای dynamic-link libraries)DLL) اجرا می شوند".
در حقیقت svchost.exe نامی عمومی برای عملکردهایی است که از طریق DLLها و یا از داخل آنها اجرا می شوند. فایل svchost.exe که در پوشه SystemRoot%\System32% قرار دارد، در هنگام آغاز اجرای ویندوز، قسمت Services رجیستری را چک می کند و لیستی از سرویس هایی را که باید اجرا شوند، ایجاد می کند. موارد متعددی از svchost می توانند همزمان با هم اجرا شوند که هر کدام از آنها شامل گروهی خاص از سرویس ها می شود. پس به همین دلیل، سرویس های جداگانه می توانند همزمان و فارغ از اینکه svchost کی اجرا شده باشد، با هم اجرا شوند تا روند بالا آمدن ویندوز تسریع گردد. در ضمن این شیوه گروه بندی سرویس ها، باعث ایجاد کنترل بهتر و Debug سریعتر می شود.
واقعیت امر این است که از مدتها قبل، مایکروسافت شروع به انتقال تمامی توابع عملیاتی سرویس های داخلی ویندوز به داخل فایل های dll. به جای فایل های exe. (فایل های dll. همان توابع کتابخانه ای ویندوز می باشند) نمود. یعنی به جای اینکه این توابع در فایل های exe. باشند، آنها را در فایل های dll. قرار داد تا در صورت نیاز، فراخوانی شوند. نگاه کردن به این موضوع از دید یک برنامه نویس، این نتیجه را می دهد که یک تابع می تواند بارها مورد استفاده قرار گیرد... ولی مشکل اینجاست که شما نمی توانید یک فایل dll. را به طور مستقیم از داخل ویندوز اجرا کنید، بلکه باید توسط یک برنامه در حال اجرا (exe.) فراخوانی شود. بدینسان svchost.exe متولد شد!

 

چرا تعداد زیادی svchost.exe در حال اجرا وجود دارد؟
 

اگر یک نگاهی به قسمت سرویس های ویندوز (از طریق منوی Start و در Run تایپ کنید services.msc) بیاندازید، احتمالاً متوجه آن می شوید که فعالیت و کارایی ویندوز، مستلزم داشتن سرویس های زیادی می باشد. به عبارتی اگر همه سرویس های تحت نظر، تنها با یک svchost.exe اجرا شوند، در نتیجه خرابی و از کار افتادگی یکی از آنها، باعث از کار انداختن تمامی سرویس های ویندوز می شود!... بنابراین این سرویس ها از هم تفکیک شده اند.

لازم به ذکر است، این سرویس ها در گروه های منطقی دسته بندی می شوند، و سپس یک svchost.exe برای هر گروه ایجاد می شود. برای مثال یک svchost.exe، سرویس هایی را که به firewall مربوط می شوند، اجرا می کند و دیگری تمامی سرویس هایی را که به رابط کاربر مربوط می شوند، به اجرا در می آورند. اما فراموش نکنید که برخی از این سرویس ها مورد نیاز شما نبوده و فقط به عنوان یک سربار، سبب سنگین شدن بی دلیل پیکره ویندوز و به همان نسبت کندن شدن آن می شوند.

حالا ما چه کارهایی می توانیم انجام بدهیم؟
 

برای بالا بردن راندمان کاری کامپیوتر و آزاد کردن منابع سیستمی تا حد ممکن، شما می توانید سرویس هایی را که اصلاً نیازی به اجرای آنها ندارید، متوقف کنید و یا کاملاً آنها را از کار بیاندازید. در واقع اگر شما متوجه شده اید که مقدار زیادی از CPU Usage به یک svchost.exe اختصاص داده شده، می توانید سرویسی را که تحت نظر این svchost.exe کار می کند، restart کنید. البته برای انجام این کار، مشکل اصلی اینجاست که ما چگونه می توانیم تشخیص دهیم که یک سرویس معین، تحت نظر کدام یک از svchost.exeها کار می کند؟ که در ادامه به این مورد می پردازیم.

نحوه برطرف سازی مشکل ویندوز:

اگر هنوز نمی دانید منظور از svchost چیست لطفا Task Managerرا باز کرده و سپس Show processes from all users را انتخاب کنید.

 

و اگر میخواهید بدانید کدام سرویسها از طریق یک svchost خاص میزبانی میشوند از طریق command prompt دستور زیر را وارد کنید:

tasklist /SVC و صفحه زیر را خواهید دید.

همچنین شما میتوانید از طریق Task Manager در ویندوز ویستا روی یک svchost.exe راست کلیک کرده گزینه Go to Service را انتخاب کنید:

با این کار به Services tab منتقل خواهید شد.و سرویس هایی که توسط همان svchost.exe در حال اجرا هستند انتخاب شده مشخص میشوند:

چطور می توانم سرویس خاصی را متوقف کنم؟؟؟

عبارت services.msc را در start menu search یا run box ویندوز تایپ کنید تا پنجره سرویسهای ویندوز باز شود.سرویس مربوطه را از لیست انتخاب کرده روی آن راست کلیک کنید و گزینه Properties را انتخاب کنید.

Startup Type را از گزینه حاضر به Disabled تغییر دهید و کلید Stop را فشار دهید.سرویس به سرعت متوقف میشود.