جدید!
سرور ابری ساعتی فعال شد. ۱۰۰ هزار تومان اعتبار هدیه بگیرید
Kill Process در لینوکس؛ آموزش توقف پردازش‌ها

آموزش مدیریت پردازش‌های لینوکس

Kill Process در لینوکس

گاهی یک Process در لینوکس باعث مصرف بیش از حد CPU، اشغال حافظه RAM یا اختلال در اجرای سرویس‌های سرور می‌شود. در این آموزش یاد می‌گیرید چگونه Process های فعال را پیدا کنید، PID آن‌ها را مشاهده کنید و با دستور kill در لینوکس پردازش‌های مشکل‌دار را متوقف کنید.

در سیستم‌عامل لینوکس گاهی ممکن است یک برنامه، سرویس یا اسکریپت به‌درستی متوقف نشود و باعث مصرف بیش از حد منابع سرور شود. برای مثال ممکن است یک Process باعث افزایش مصرف CPU، اشغال حافظه RAM یا اختلال در اجرای سرویس‌های دیگر شود.
در چنین شرایطی مدیر سرور باید بتواند پردازش موردنظر را پیدا کرده و در صورت نیاز آن را متوقف کند.
در این آموزش یاد می‌گیریم چگونه در لینوکس Process ها را مشاهده کنیم، PID هر پردازش را پیدا کنیم و با استفاده از دستور kill در لینوکس یک پردازش را متوقف کنیم.

Process در لینوکس چیست؟

در لینوکس هر برنامه یا سرویسی که در حال اجرا باشد، یک Process محسوب می‌شود.
زمانی که یک برنامه اجرا می‌شود، سیستم‌عامل یک پردازش ایجاد کرده و منابعی مانند:
  • CPU
  • حافظه RAM
  • فایل‌ها
  • ارتباطات شبکه
را در اختیار آن قرار می‌دهد.
برای مثال موارد زیر همگی Process هستند:
  • سرویس Nginx
  • دیتابیس MySQL
  • Apache
  • اسکریپت‌های PHP
  • Cron Job ها
  • برنامه‌های Python
در یک سرور لینوکسی معمولاً صدها Process هم‌زمان در حال اجرا هستند.
Kill Process در لینوکس چیست؟

Kill Process در لینوکس چیست؟

Kill Process در لینوکس به معنی ارسال یک Signal به یک پردازش برای متوقف کردن یا خاتمه دادن اجرای آن است. برخلاف تصور رایج، دستور kill همیشه به معنی بستن اجباری برنامه نیست. این دستور می‌تواند Signalهای مختلفی برای یک Process ارسال کند و رفتار نهایی به Signal انتخاب‌شده بستگی دارد.
در حالت عادی، زمانی که دستور kill PID اجرا می‌شود، سیگنال SIGTERM برای پردازش ارسال می‌شود. این سیگنال از برنامه می‌خواهد اجرای خود را به‌صورت کنترل‌شده متوقف کند. در نتیجه برنامه فرصت دارد فایل‌های باز را ببندد، اطلاعات لازم را ذخیره کند و منابعی که در اختیار دارد آزاد کند.
اگر یک Process پاسخ‌گو نباشد و با روش عادی متوقف نشود، می‌توان از Signalهای قوی‌تری مانند SIGKILL استفاده کرد. با این حال، توقف اجباری باید آخرین گزینه باشد.

PID چیست؟

هر Process در لینوکس یک شناسه اختصاصی دارد که با نام PID (Process ID) شناخته می‌شود.
PID یک عدد منحصر‌به‌فرد است که سیستم‌عامل برای شناسایی هر پردازش استفاده می‌کند.
برای مثال:
nginx 1542 mysql 2318 php 4521
در این مثال:
1542 شناسه Process مربوط به Nginx است.
2318 شناسه Process مربوط به MySQL است.
برای متوقف کردن یک Process معمولاً به PID آن نیاز داریم.
PID تا زمانی معتبر است که Process در حال اجرا باشد. پس از پایان یک پردازش، سیستم‌عامل می‌تواند همان شماره PID را در آینده به Process دیگری اختصاص دهد. به همین دلیل قبل از اجرای دستور kill بهتر است مطمئن شوید PID موردنظر هنوز متعلق به همان برنامه‌ای است که قصد متوقف کردن آن را دارید.
علاوه بر PID، هر پردازش می‌تواند دارای یک Parent Process ID یا PPID نیز باشد. PPID مشخص می‌کند چه پردازشی Process فعلی را ایجاد کرده است. این موضوع هنگام عیب‌یابی سرویس‌ها و اسکریپت‌هایی که Processهای فرزند زیادی ایجاد می‌کنند، اهمیت دارد.

چگونه Process های در حال اجرا را مشاهده کنیم؟

استفاده از دستور ps:

یکی از ساده‌ترین روش‌ها برای مشاهده پردازش‌ها استفاده از دستور:
ps aux
مشاهده Process های لینوکس با دستور ps aux
است.
خروجی نمونه:
USER PID %CPU %MEM COMMAND root 1542 0.1 1.2 nginx mysql 2318 2.5 5.4 mysqld

در ستون PID می‌توانید شناسه هر پردازش را مشاهده کنید.

در خروجی این دستور چند ستون مهم وجود دارد:
  • USER: کاربری که Process را اجرا کرده است.
  • PID: شناسه اختصاصی پردازش.
  • %CPU: میزان مصرف CPU توسط Process.
  • %MEM: درصد حافظه RAM مصرف‌شده.
  • COMMAND: برنامه یا دستوری که Process را ایجاد کرده است.
هنگام عیب‌یابی سرور معمولاً ستون‌های %CPU، %MEM و PID بیشترین اهمیت را دارند. برای مثال اگر مصرف CPU سرور به‌طور ناگهانی افزایش پیدا کند، می‌توان از خروجی ps برای پیدا کردن Processهای پرمصرف و سپس بررسی PID آن‌ها استفاده کرد.

جزئیات کامل گزینه‌ها و نحوه نمایش Processها در مستندات دستور ps در دسترس است.

پیدا کردن Process خاص با grep:

اگر دنبال یک برنامه مشخص هستید می‌توانید خروجی را فیلتر کنید.
برای مثال پیدا کردن Nginx:
ps aux | grep nginx
خروجی:
root 1542 nginx
در اینجا PID برابر با:
1542
است.

مشاهده Process ها با دستور top:

دستور:
top
یکی از ابزارهای محبوب مدیریت سرور لینوکس است.
با استفاده از top می‌توانید اطلاعات لحظه‌ای موارد زیر را مشاهده کنید:
  • میزان مصرف CPU
  • مصرف RAM
  • تعداد Process ها
  • PID هر برنامه
برای خروج از محیط top کلید:
q
را فشار دهید.
مانیتورینگ پردازش های لینوکس با دستور top

استفاده از دستور htop برای مدیریت بهتر Process ها

اگر ابزار htop روی سرور نصب باشد، مدیریت پردازش‌ها ساده‌تر می‌شود.
نصب در Ubuntu:
apt install htop
اجرا:
htop
در htop می‌توانید:
  • در htop می‌توانید:
  • Process ها را جستجو کنید.
  • مصرف منابع را ببینید.
  • پردازش را مستقیم متوقف کنید.

تفاوت ps، top و htop چیست؟

هر سه ابزار برای مشاهده Processهای لینوکس استفاده می‌شوند، اما کاربرد آن‌ها یکسان نیست. دستور ps معمولاً یک Snapshot از وضعیت Processها در همان لحظه ارائه می‌دهد و برای جستجو، فیلتر کردن و استفاده در اسکریپت‌ها بسیار مناسب است.

در مقابل، top اطلاعات را به‌صورت لحظه‌ای به‌روزرسانی می‌کند و برای بررسی مصرف CPU و RAM در زمان بروز مشکل کاربرد بیشتری دارد.

htop نیز عملکردی مشابه top دارد، اما رابط تعاملی و خواناتری ارائه می‌دهد و امکان جستجو، مرتب‌سازی و مدیریت Processها را ساده‌تر می‌کند.

چگونه یک Process را در لینوکس متوقف کنیم؟

بعد از پیدا کردن PID می‌توانیم آن Process را متوقف کنیم.
kill PID
مثلاً:
kill 1542
در این مثال Process شماره 1542 متوقف می‌شود.

تفاوت kill و kill -9 در لینوکس

دستور kill به صورت پیش‌فرض یک سیگنال استاندارد ارسال می‌کند:
SIGTERM
این روش اجازه می‌دهد برنامه قبل از بسته شدن، عملیات خود را کامل کند.
اما اگر Process پاسخگو نباشد، می‌توان از:
kill -9 PID
در این حالت:
SIGKILL
ارسال شده و Process فوراً متوقف می‌شود.
توجه کنید که استفاده مداوم از kill -9 پیشنهاد نمی‌شود، زیرا برنامه فرصت ذخیره اطلاعات یا انجام عملیات پایانی را ندارد.
هنگام استفاده از pkill یا killall باید دقت بیشتری داشته باشید، زیرا برخلاف kill که معمولاً یک PID مشخص را هدف قرار می‌دهد، این دستورات ممکن است چند Process را هم‌زمان متوقف کنند.
برای مثال اگر چند Process با نام یکسان در حال اجرا باشند، اجرای pkill nginx می‌تواند روی همه Processهای منطبق اثر بگذارد. به همین دلیل در سرورهای Production بهتر است قبل از اجرای این دستورات، Processهای موردنظر را بررسی کنید.

برای مشاهده گزینه‌ها و نحوه عملکرد این دستور می‌توانید به مستندات دستور kill در لینوکس مراجعه کنید.

پیدا کردن PID با دستور pidof

برای بعضی سرویس‌ها می‌توانید مستقیماً PID را پیدا کنید.
مثلاً:
pidof nginx
خروجی:
1542
سپس:
kill 1542

متوقف کردن Process با نام برنامه

گاهی می‌توان Process ها را با نام برنامه متوقف کرد.
برای مثال:
pkill nginx
این دستور تمام Process هایی که نام nginx دارند را متوقف می‌کند.
همچنین:
killall nginx
نیز برای همین کاربرد استفاده می‌شود.

چگونه Process های پرمصرف را پیدا کنیم؟

اگر سرور شما کند شده است، ابتدا باید Process های پرمصرف را پیدا کنید.
استفاده از:
top
یا:
htop
مانیتورینگ پردازش های لینوکس با دستور htop
به شما کمک می‌کند Process هایی که بیشترین مصرف CPU یا RAM دارند را شناسایی کنید.
برای بررسی مصرف CPU:
ps aux --sort=-%cpu
مانیتورینگ لینوکس با دستور ps aux --sort=-%cpu
برای بررسی مصرف RAM:
ps aux --sort=-%mem
مانیتورینگ لینوکس با دستورps aux --sort=-%mem

نمونه عملی پیدا کردن و متوقف کردن یک Process پرمصرف

فرض کنید مصرف CPU سرور به‌طور ناگهانی افزایش پیدا کرده است. ابتدا می‌توانیم با دستور زیر وضعیت Processها را بررسی کنیم:
top
فرض کنید در خروجی مشاهده می‌کنیم Process با PID برابر 4210 بیشترین CPU را مصرف می‌کند. قبل از متوقف کردن آن بهتر است اطلاعات بیشتری درباره Process بررسی کنیم:
ps -p 4210 -o pid,user,%cpu,%mem,cmd

با این دستور می‌توانیم مطمئن شویم PID مربوط به چه برنامه‌ای است و چه کاربری آن را اجرا کرده است.

اگر بعد از بررسی مشخص شد Process مشکل‌دار است، ابتدا توقف عادی را امتحان می‌کنیم:

kill 4210
سپس با دستور زیر بررسی می‌کنیم که Process همچنان فعال است یا خیر:
ps -p 4210
اگر Process همچنان فعال بود و به SIGTERM پاسخ نداد، در آخرین مرحله می‌توانیم از:
kill -9 4210
استفاده کنیم.
این روش بهتر از آن است که بدون بررسی مستقیماً kill -9 اجرا شود، زیرا ابتدا هویت Process و وضعیت آن بررسی می‌شود.

مدیریت Process ها در سرور مجازی لینوکس

در سرورهای مجازی معمولاً Process های زیادی برای اجرای سرویس‌ها فعال هستند.
مدیریت صحیح Process ها کمک می‌کند:
  • مصرف منابع کنترل شود.
  • سرویس‌های مشکل‌دار سریع‌تر رفع شوند.
  • پایداری سرور افزایش پیدا کند.
اگر از سرور مجازی لینوکس برای اجرای سرویس‌های خود استفاده می‌کنید، انتخاب منابع مناسب و مانیتورینگ مداوم اهمیت زیادی دارد.
برای آشنایی بیشتر با مدیریت سرور لینوکس، آموزش‌های دیگر وب‌داده درباره SSH، مدیریت VPS و دستورات لینوکس را مطالعه کنید.

جمع‌بندی

در این آموزش یاد گرفتیم چگونه در لینوکس یک Process را پیدا و متوقف کنیم.
با یادگیری Kill Process در لینوکس می‌توانید کنترل بیشتری روی سرویس‌ها و منابع سرور داشته باشید.
مهم‌ترین دستورات:
مشاهده Process ها:
ps aux
مشاهده لحظه‌ای پردازش‌ها:
top
پیدا کردن PID:
pidof program
متوقف کردن Process:
kill PID
توقف اجباری:
kill -9 PID
با استفاده از این دستورات می‌توانید کنترل بیشتری روی پردازش‌های سرور لینوکسی خود داشته باشید

سوالات متداول از Kill Process در لینوکس:

تفاوت kill و kill -9 چیست؟

kill به‌صورت پیش‌فرض سیگنال SIGTERM می‌فرستد و به برنامه فرصت می‌دهد به‌صورت صحیح بسته شود. kill -9 از SIGKILL استفاده می‌کند و پردازش را فوراً متوقف می‌کند؛ بنابراین بهتر است فقط زمانی استفاده شود که پردازش به روش عادی متوقف نمی‌شود.

اگر دستور kill پردازش را متوقف نکرد چه کار کنیم؟

ابتدا مطمئن شوید PID صحیح است و دسترسی لازم را دارید. در صورت پاسخ‌گو نبودن Process می‌توانید در مرحله بعد از kill -9 PID استفاده کنید.

تفاوت kill، pkill و killall چیست؟

kill معمولاً بر اساس PID عمل می‌کند، در حالی که pkill و killall امکان متوقف کردن پردازش‌ها بر اساس نام را فراهم می‌کنند.

چگونه Process پرمصرف را در لینوکس پیدا کنیم؟

می‌توانید از top، htop یا دستورهای ps aux --sort=-%cpu و ps aux --sort=-%mem برای شناسایی پردازش‌های پرمصرف استفاده کنید.

آیا استفاده از kill -9 خطرناک است؟

ذاتاً خطرناک نیست، اما چون برنامه فرصت ذخیره اطلاعات یا انجام Cleanup را ندارد، ممکن است در بعضی برنامه‌ها باعث از دست رفتن داده یا باقی ماندن وضعیت ناسالم شود.

برای اجرای kill به دسترسی root نیاز داریم؟

کاربر معمولاً می‌تواند Processهای متعلق به خودش را متوقف کند. برای متوقف کردن پردازش متعلق به کاربران دیگر یا بعضی سرویس‌های سیستمی، معمولاً به sudo یا دسترسی root نیاز است.

Setareh Mirzaei
Setareh Mirzaei

فعال حوزه فناوری و زیرساخت، علاقه‌مند به سرورها، لینوکس، توسعه وب و تجربه‌های جدید در دنیای تکنولوژی.

مقاله‌ها: 12
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *