مدیریت فرایند در ویندوز؛ از Task Manager تا PowerShell
شناخت Process و PID در ویندوز، استفاده از Task Manager، Get-Process و Stop-Process، تفاوت با سرویس و اشتباههای خطرناک هنگام kill.
بنیانگذار و مهندس محصول

وقتی IDE هنگ میکند، سرور توسعه پورت را رها نمیکند، یا فن لپتاپ بدون دلیل میچرخد، با فرایند طرفید نه با جادو. مدیریت فرایند یعنی دیدن چه چیزی اجرا میشود، چقدر منابع میگیرد، والدش کیست، و چگونه مودبانه یا در صورت نیاز اجباری تمامش کنید.
این مقاله مدل ذهنی Process در ویندوز، مسیر UI با Task Manager، مسیر خط فرمان با PowerShell، و مرز با Windows Service را میسازد. پیدا کردن صاحب پورت در ۱۸۶ جدا آمده است.

پاسخ کوتاه
هر برنامهٔ در حال اجرا یک یا چند فرایند با PID دارد. Task Manager دید سریع و امن برای کاربر است؛ Get-Process و Stop-Process کنترل اسکریپتپذیر میدهند. قبل از Force، بدانید فرایند متعلق به اپ شماست یا سرویس سیستمی. کشتن خام سرویس گاهی توسط Service Control Manager دوباره زنده میشود یا سیستم را ناپایدار میکند.
اول شناسایی، بعد توقف. PID را از روی حدس وارد نکنید.
فرایند در ویندوز یعنی چه؟
فرایند ظرف اجرای برنامه است: فضای آدرس، هندلها، رشتهها (threadها) و توکن امنیتی. یک اپ میتواند چند فرایند داشته باشد (مثلاً مرورگر). PID تا پایان عمر آن نمونه یکتاست؛ بعد از restart همان برنامه PID جدید میگیرد.
برخلاف تصور رایج، بستن پنجره همیشه یعنی پایان تمیز همهٔ فرایندهای مرتبط نیست. بعضی اپها در tray میمانند یا فرایند فرزند جدا نگه میدارند. برای توسعهٔ محلی، این موضوع وقتی مهم است که فکر میکنید پورت آزاد شده ولی هنوز listen است.
Task Manager؛ نقطهٔ شروع بصری
با Ctrl+Shift+Esc باز کنید. تب Processes مصرف CPU و Memory را نشان میدهد؛ با کلیک راست میتوان End task کرد. برای جزئیات بیشتر، نمای Details را ببینید تا PID و نام اجرایی مشخص شود.
- برای اپ کاربر عادی معمولاً End task کافی است.
- اگر پاسخ نمیدهد، End task را تکرار کنید؛ Force از PowerShell مرحلهٔ بعد است.
- ستون PID را روشن کنید تا با خروجی ترمینال مطابقت بدهید.
Task Manager برای آموزش و اضطرار عالی است؛ برای اتوماسیون و تکرارپذیری، PowerShell بهتر است.
مشاهده با Get-Process
powershell
Get-Process Get-Process -Name node -ErrorAction SilentlyContinue Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name,Id,CPU,WorkingSet64
خروجی شیء است؛ میتوانید فیلتر و مرتب کنید بدون پارس متن tasklist. برای دیدن مسیر اجرایی در صورت دسترسی:
powershell
Get-Process -Id 1234 | Select-Object Name,Id,Path,StartTime
گاهی Path خالی است مگر مجوز یا معماری درست باشد؛ مستند Get-Process به محدودیتهای ۳۲/۶۴ بیتی اشاره میکند.
درخت و والد؛ چرا مهم است؟
دانستن والد کمک میکند بفهمید فرایند یتیم ابزار شماست یا بخشی از زنجیرهٔ نصب/سرویس. در PowerShell میتوان از WMI/CIM استفاده کرد:
powershell
Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Select-Object ProcessId,ParentProcessId,CommandLine
CommandLine برای تشخیص اینکه کدام پروژهٔ Node بالا است طلایی است — مخصوصاً وقتی چند instance همنام دارید.
پایاندادن کنترلشده
powershell
Stop-Process -Name notepad Stop-Process -Id 1234 Stop-Process -Id 1234 -Force
بدون Force، درخواست نزدیکتری به خاتمهٔ عادی است. Force خشنتر است و فرصت cleanup را کم میکند. برای فرایندهای سرویس، Stop-Service را ترجیح دهید تا وابستگیها و سیاست بازیابی رعایت شود.
| روش | مناسب برای | ریسک |
|---|---|---|
| End task در Task Manager | اپ UI هنگکرده | کم تا متوسط |
| Stop-Process | ابزار توسعه، PID مشخص | متوسط اگر PID اشتباه |
| Stop-Process -Force | فرایند جوابندہ | از دست رفتن دادهٔ ذخیرهنشده |
| Stop-Service | سرویس ویندوز | قطع وابستهها |
مصرف منابع؛ کی نگران شویم؟
CPU بالا کوتاهمدت هنگام compile طبیعی است. CPU یا حافظهٔ دائم بالا بدون workload یعنی نشت، حلقهٔ بینهایت، یا اسکنر امنیتی. دیسک ۱۰۰٪ گاهی همان آنتیویروس روی node_modules است نه باگ شما.
powershell
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 5
مرز با سرویس و svchost
خیلی از سرویسهای ویندوز زیر host فرایندهای مشترک اجرا میشوند. کشتن تصادفی svchost میتواند شبکه، صوت یا اجزای سیستم را بشکند. اگر نام را نمیشناسید، اول Get-Service و مستند را ببینید نه End task فوری.
سناریوی توسعهدهنده: سرور محلی رها نمیشود
- نام فرایند را حدس بزنید (node، python، dotnet).
- با Get-Process یا CommandLine نمونهٔ درست را پیدا کنید.
- اگر پورت مشخص است، از ۱۸۶ مالک پورت را بگیرید.
- Stop-Process روی همان PID.
- دوباره گوشدادن پورت را با Get-NetTCPConnection تأیید کنید.
powershell
Get-NetTCPConnection -LocalPort 5000 -ErrorAction SilentlyContinue | ForEach-Object { Get-Process -Id $_.OwningProcess }
اشتباههای رایج
- کشتن همهٔ node.exeها وقتی فقط یکی از پروژهها مشکل دارد.
- ریبوت بهعنوان اولین راهحل برای پورت اشغال.
- Force دائمی بدون فهم دلیل hang.
- نادیده گرفتن آنتیویروس بهعنوان فرایند پرمصرف.
- یکیگرفتن بسته شدن پنجره با مرگ فرایند پسزمینه.
سوالات متداول
فرق process و thread چیست؟
Thread مسیر اجرای داخل فرایند است. معمولاً کل فرایند را مدیریت میکنید مگر در دیباگ پیشرفته.
taskkill هنوز لازم است؟
در cmd و اسکریپتهای قدیمی بله. در PowerShell مدرن Stop-Process خواناتر است.
چرا بعد از Stop دوباره برمیگردد؟
احتمالاً سرویس با سیاست بازیابی، watchdog، یا ابزار parent دوباره آن را ساخته است.
اگر راهحل شما تغییر سطح Machine بود، بگویید چرا User کافی نبود. اگر Force کردید، بگویید چرا توقف ملایم شکست. این انضباط کوچک کیفیت عملیاتی تیم را بالا میبرد.
قبل از اینکه مشکل را بستهشده اعلام کنید: نشست جدید را تست کنید، مسیر یا پورت یا سرویس را دوباره با ابزار ساختیافته تأیید کنید، و یک خط در یادداشت تیمی بنویسید که علت ریشهای چه بود. بدون این سه قدم، همان تیکت هفتهٔ بعد برمیگردد.
چکلیست پایانی قبل از بستن تیکت
بعضی فرایندهای سیستمی را بدون ارتفاع نمیبینید یا نمیتوانید متوقف کنید. Elevated بودن دائمی عادت بدی است. فقط برای همان کار ترمینال Elevated باز کنید و ببندید. کشتن فرایند کاربر دیگر در محیط سازمانی ممکن است خلاف سیاست باشد.
مجوز و ارتفاع
ابزارهای Sysinternals مثل Process Explorer برای موارد سختتر عمق بیشتری میدهند، ولی برای اکثر روزهای توسعه Task Manager و Get-Process کافیاند. ابزار سنگین را وقتی شواهد کافی ندارید وسط نگذارید.
Hang یعنی UI پاسخ نمیدهد؛ لزوماً CPU صد نیست. گاهی قفل I/O یا انتظار شبکه است. CPU بالا ممکن است کار مفید باشد. قبل از Force، ببینید آیا ذخیرهٔ کار ممکن است و آیا پنجرهٔ Not Responding فقط موقتی است.
Hang در برابر CPU بالا
برای اپهای .NET و Node که worker میسازند، کشتن فقط والد گاهی کافی نیست یا برعکس، کشتن فرزند بدون والد حلقهٔ restart میسازد. درخت را یکبار ببینید.
نام فرایند، PID، مسیر یا CommandLine، کاربر اجراکننده، و اینکه سرویس است یا نه را قبل از Stop مشخص کنید. اگر چند instance همنام دارید، بدون CommandLine تقریباً حدس میزنید. روی ماشین اشتراکی این حدس هزینه دارد.
شناسایی قبل از اقدام؛ چکلیست سیثانیهای
نسخهبندی اسکریپتهای عیبیابی را جدی بگیرید. یک gist شخصی یا پوشه در ریپو داخلی با تاریخ و پیشفرضهای ایمن، بهتر از حافظهٔ شفاهی است.
مستند رسمی را نخواندن و اعتماد به اولین نتیجهٔ جستجو، اجرای همیشگی Elevated، و تغییر Machine برای مشکل User، سه الگوی پرهزینهاند. هزینهٔ واقعیشان معمولاً ساعتها بعد معلوم میشود؛ وقتی محیط برای همکار یا CI میشکند.
اشتباههای سطح بالاتر
در پایان تمرین، همه چیز را به حالت اول برگردانید: فرایند تست را ببندید، متغیر موقت را رها کنید، و سرویس را اگر تغییر دادید به Startup Type قبلی برگردانید. پاکسازی بخشی از حرفهایگری است.
یک سرور محلی بالا بیاورید، پورتش را پیدا کنید، فرایند را بشناسید، یک متغیر محیطی موقت ست کنید، PATH را فقط مشاهده کنید بدون تغییر مخرب، وضعیت یک سرویس بیخطر را بخوانید، و پنج رویداد اخیر Application را ببینید. این مدار بسته، دانش را از حالت خواندنی به حالت عضلانی میبرد.
تمرین پیشنهادی سیدقیقهای
اگر از لینوکس آمدهاید، معادل ذهنی بسازید ولی فرمان را عیناً ترجمه نکنید. مدل سرویس ویندوز با systemd شباهت مفهومی دارد و تفاوت ابزاری. مدل env با export شباهت دارد و تفاوت سطح Machine و User.
مفاهیم این مقاله را با Terminal، PowerShell، فرایند، پورت، env، PATH، سرویس و Event Viewer بهصورت حلقه ببینید نه جزایر جدا. بیشتر تیکتهای واقعی دو یا سه حلقه از این زنجیره را درگیر میکنند.
ارتباط با بقیهٔ سری ویندوز
تفاوت محیط خانگی و لپتاپ سازمانی را دستکم نگیرید. آنتیویروس، پروکسی، و سیاست اجرای اسکریپت رفتار ابزارها را عوض میکنند. اگر فقط روی یک ماشین تست میکنید، نتیجه را حقیقت مطلق ندانید.
هر بار که راهحل موقتی پیدا میکنید، همان را به یک فرمان قابلکپی در یادداشت شخصی تبدیل کنید. هفتهٔ بعد همان فرمان را از حافظه نمینویسید؛ از دفترک میآورید و خطا کمتر میشود.
در کار واقعی، مشکلها ترکیبیاند: پورت اشغال، PATH کهنه، سرویس متوقف، و ترمینال با پروفایل غلط همزمان ظاهر میشوند. بهجای تغییر همزمان همه چیز، یک متغیر را ثابت نگه دارید و فقط یک فرض را آزمایش کنید. این نظم علمی سرعت عیبیابی را بیشتر از هر میانبر افزایش میدهد.
عمق عملی بیشتر برای کار روزانه
تغییرات Machine، سیاست دامنه، و آنتیویروس مرکزی معمولاً خارج از اختیار شماست. آنچه در اختیار شماست: پروفایل Terminal، اسکریپت User، انتخاب پورت پروژه، و خواندن لاگ. روی لایهٔ قابلکنترل تمرکز کنید و برای بقیه تیکت شفاف با شاهد بسازید.
مرز مسئولیت توسعهدهنده و IT
اگر وسط راه مجبور به Force شدید، بعداً علت را پیدا کنید که چرا توقف ملایم کار نکرد: قفل فایل، انتظار شبکه، یا بنبست رشتهها. Force بدون یادگیری، همان مشکل را تکرار میکند.
در هر مرحله یک شاهد بنویسید: خروجی کوتاه فرمان یا Event ID. وقتی از کسی کمک میگیرید، شاهد بهتر از توصیف احساسی است. همین عادت در تیمهای دورکاری ارزش دوچندان دارد.
فرض کنید بعد از ریبوت، API محلی بالا نمیآید. اول وضعیت سرویس وابسته را بخوانید، بعد پورت را با Get-NetTCPConnection چک کنید، بعد PATH و متغیرهای لازم اپ را در همان نشست تأیید کنید، و در نهایت اگر سرویس fail شده Event Viewer را روی زمان بوت فیلتر کنید. این ترتیب از پراکنده کاری جلوگیری میکند.
سناریوی ترکیبی که باید یکبار کامل بروید
خلاصه
مدیریت فرایند در ویندوز با شناسایی PID و مسیر/خط فرمان شروع میشود، با Task Manager برای اضطرار ادامه مییابد، و با Get-Process/Stop-Process برای کار دقیق و تکراری کامل میشود. Force آخرین ابزار باشد و سرویس را با ابزار سرویس مدیریت کنید. مرحلهٔ بعد: مالک پورت را سریع پیدا کنید.
منابع و مراجع
- Microsoft Learn — Get-Process — https://learn.microsoft.com/powershell/module/microsoft.powershell.management/get-process
- Microsoft Learn — Stop-Process — https://learn.microsoft.com/powershell/module/microsoft.powershell.management/stop-process
- Microsoft Learn — Get-CimInstance — https://learn.microsoft.com/powershell/module/cimcmdlets/get-ciminstance
- Microsoft Support — Task Manager — https://support.microsoft.com/windows/task-manager
- Microsoft Learn — Win32_Process class — https://learn.microsoft.com/windows/win32/cimwin32prov/win32-process
نویسنده
سهیل ابراهیمپور بنیانگذار FutureForge است. روی طراحی محصول، معماری و استقرار نرمافزار سفارشی کار میکند.
یادداشتهای مرتبط
اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، میتوانید درباره پروژه صحبت کنیم.
مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ میکنیم.




