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

محتوای مطلب

در این مقاله ما سعی خواهیم کرد تا نگاه کوتاهی به مدیریت پردازش ها در لینوکس داشته باشیم و چند دستور مهم جهت پایش و مدیریت منابع در سیستم عامل لینوکس را با هم بررسی کنیم.

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

هر برنامه که در لینوکس اجرا میشود در سیستم عامل به عنوان یک پردازش شناخته میشود و حتی ممکن است یک برنامه برای اینکه اجرایی شود چندین پردازش یا نخ (Thread) را در سیستم عامل ایجاد کندو هم چنین به هر پردازش در زمان اجرا یک کد اختصاص داده میشود که در سیستم عامل آن پردازش با آن کد(PID) شناخته میشود. در لینوکس ما انواع مختلفی از پردازش ها داریم که وضعیت های متفاوتی دارند و همچنین شما میتوانید این وضعیت ها را به دلخواه تغییر دهید. مدیریت پردازش ها در لینوکس به این معنی است که شما بتوانید وضعیت هر کردام را مشاهده و در صورت نیاز آن را متوقف، ریلود یا kill کنید.

انواع پردازش ها

بصورت کلی هر پردازش در لینوکس شامل دو سته بندی زیر میشود:

  • پردازش های پس زمینه(Background process):به این پردازش ها غیر تعاملی یا اتومات هم گفته میشود به این علت که ارتباطی با سشن(Session) خاصی ندارد و نیاز به کاربر برای اجرای آنها نیست. البته شما میتوانید دستوراتی که در shell وارد میکنید را به background ببرید تا بتوانید کارهای دیگر را انجام دهید.
  • پردازش های پیش زمینه(Foreground process): به این دسته از پردازش ها تعاملی هم گفته میشود به این علت که بصورت اتوماتیک اجرا نخواهند شد و نیاز است که کاربر حتما آنها را شروع کند و در یک سشن(Session) با دستور کاربر به حالت اجرا بروند. بصورت پیش فرص دستوراتی که در shell وارد میکنید همگی در این حالت هستند.

همچنین با توجه به نحوه ایجاد پردازش در سیستم عامل پردازش ها میتوانند شما دسته بندی زیر هم بشوند:

  • پردازش های والد(Parent):این پردازش ها در حین لود شدن سیستم ایجاد میشوند که سایر پردازش ها توسط این دسته از پردازش ها ایجاد میشوند. از طرفی دستوراتی که شما در shell وارد میکنید هرکدام به یک پردازش تبدیل خواهند شد که این پردازش ها میتوانند پردازش های فرزند داشته باشند.
  • پردازش های فرزند(Child): این دسته از پردازش ها مستقیما توسط کاربر ایجاد نخواهند شد و توسط سایر پردازش ها ایجاد میشوند.

init در لینوکس

زمانیکه بوت لودر در لینوکس کرنل را بوت میکند و سیستم عامل لینوکس در حال لود شدن میباشد در اصل کرنل پردازشی بنام init را اجرا میکند که تمامی پردازش های بعدی جهت کار با لینوکس بوسیله این پردازش راه اندازی میشود. در اصل این پردازش با کد پردازش(PID) عدد 1 والد تمامی پردازش های سیستم عامل لینوکس است.

انتقال یک پردازش به background

قسمتی از مدیریت پردازش ها در لینوکس شامل این مبحث میشود که چطور یک برنامه یا پردازش را به background منتقل کنیم یا از background به foreground  انتقال دهیم. همانطور که ذکر شد پردازش ها در لینوکس دو دسته هستند یا بصورت غیر تعاملی در background در حال اجرا میباشند یا در shell و خط فرمانی که شما به آن متصل هستید با وارد کردن دستور بصورت تعاملی در حال کار با آن میباشید. در خط فرمان شما با گذاشتن کاراکتر & در انتهای دستور میتوانید دستور را به background منتقل کنید. با انجام دادن این کار خط فرمان شما منتظر آن دستور نمیماند و فقط در صورتیکه خروجی داشته باشد به شما نمایش میدهد.

انتقال پردازش به بک گراند

همچنین میتوانید با کلید ترکیبی CTRL+Z یک برنامه را به background منتقل کنید اما برنامه به حالت stopped تغییر حالت پیدا میکند. با انجام این کار سیستم عامل سیگنال SIGSTOP برای برنامه ارسال میکند. همچنین با استفاده از دستور jobs لیست برنامه هایی که در background هستند را مشاهده کنید و اگر نیاز داشتید که به foreground  انتقال پیدا کنند با استفاده از دستور fg و کاراکتر % به همراه عدد آن در لیست دستور jobs دستور را به حال اجرا و foreground منتقل کنید.

استاپ کردن یک پردازش

وضعیت یک پردازش در لینوکس

پردازش ها در سیستم عامل لینوکس میتوانند دارای وضعیت باشند و با توجه به وضعیت آنها، سیستم عامل به پردازش منابع اختصاص میدهد. از زمان ایجاد تا زمان تمام شدن کار آن پردازش یا برنامه میتواند وضعیت های مختلفی یک پردازش داشته باشد که لیست این وضعیت ها به شرح زیر است:

  • وضعیت running یا در حال اجرا:پردازش در این حالت در وضعیت اجرا قرار دارد یا منتظر اختصاص CPU برای اجرا میباشد که در هر دو حالت وضعیت در حال اجرا گفته میشود.
  • وضعیت wainting یا در حال انتظار: وضعیت در حال انتظار خود شامل دو حالت میشود. حالت اول interruptible process میباشد یعنی میتوان با ارسال سیگنال از حالت انتظار آن را خارج کرد و حالت دوم uninterruptible process است که در این وضعیت پردازش منتظر یک رخداد سخت افزاری است و با سیگنال نمیتوان آن را خارج کرد
  • وضعیت stopped یا متوقف: در این وضعیت پردازش با ارسال سیگنال متوقف شده است و در حافظه نگه داشته میشود و میتوان با ارسال سیگنال مجدد آن را اجرا نمود.
  • وضعیت zombie یا زامبی: پردازش در این حالت از بین رفته و به اتمام رسیده اما کماکان پردازش آن در سیستم وجود دارد.

چگونه پردازش ها را در لینوکس مشاهده کنیم؟

سیستم عامل لینوکس ابزارهای بسیار خوبی برای مدیریت پردازش ها و مشاهده آنها دارد و شما به وسیله آنها میتوانید کامل همه چیز را بررسی و کنترل کنید. در ادامه به چند ابزار و دستور برای مشاهده پردازش ها معرفی خواهیم کرد.

دستور ps یا process state

یکی از قدیمی ترین و پرکاربردترین دستورات جهت مشاهده لیست پردازش های سیستم دستور ps در لینوکس است و شما با استفاده از این دستور میتوانید با استفاده از پارامتر های متنوعی که دارد هر لیستی که از پردازش ها بخواهید مشاهده کنید. در یک مقاله جداگانه این دستور را بررسی کرده ایم. این دستور بصورت پیش فرض در سیستم عامل شما موجود است و نیازی به نصب پکیج در لینوکس ندارد. برای مثال شما میتوانید با استفاده از دستور ps و پارامتر aux- لیست تمامی پردازش های سیستم را که مربوط به همه کاربران است را همانند زیر مشاهده کنید.

ps -aux command
دستور top

دستور ps دستور قدرتمندی است که شما میتوانید از آن استفاده کنید اما این دستور بصورت آفلاین میباشد بدین صورت که وضعیت پردازش ها را در همان لحظه که شما دستور را در خط فرمان وارد کرده اید به شما نمایش میدهد و بصورت آنلاین پردازش ها را به شما نمایش نمیدهد. برای اینکه بتوانید تمامی پردازش های سیستم را بصورت آنلاین مشاهده کنید و در لحظه ببینید که چقدر منابع مصرف میکنند میتوانید از دستور top در لینوکس استفاده کنید. خروجی این دستور همانند تصویر زیر است:

دستور top در لینوکس

ارسال سیگنال به پردازش

شما میتوانید با ارسال سیگنال به پردازش ها آنها را کنترل کنید و وضعیت آنها را در سیستم تغییر دهید که برای ارسال سینگال باید از دستور kill استفاده کنید. شما میتوانید با دستور kill و پارامتر l- لیست تمامی سیگنال های موجود در سیستم را همانند زیر مشاهده کنید.

لیست سیگنال های kill

خیلی از این سیگنال ها باید در نرم افزار دیده شده باشد تا شما بتواند به وسیله آن پردازش را کنترل کنید اما در کل زمانیکه شما میخواهید سیستم عامل اقدام به بستن یک پردازش انجام دهد سیگنال SIGKILL را برای برنامه ارسال میکند. این سیگنال بدون توجه به وضعیتی که پردازش در آن قرار دارد آن را از جدول پردازش ها حذف میکند.

دیدگاهتان را بنویسید

پانزده + سیزده =