مدیریت پروسس های لینوکس با دستور kill و pid
تعریف فرایند: به زبان ساده هر برنامه ای که در اجرا شدن در حافظه کامپیوتر است را یک process یا فرایند می گویند که دارای یک شماره شناسایی منحصر به فرد به نام (process ID)PID است و سیستم عامل به وسیله این شماره هر فرایند را کنترل می کند.
تعریف منبع سیستم عامل: منابع سیستم عامل اجزایی از سیستم هستند که فرایند برای اجرا به آنها نیاز دارد. مانندI/O, RAM,CPU و…
انواع پردازش فرایندها: همۀ دستورات مربوط به فرایندهای سیستم عموماً به سه شکل با کاربر در ارتباط هستند که عبارتند از:
Interactive: دستوراتی هستند که به طور عادی در سیستم اجرا می شوند. مثل: fdisk,find,format و….
Automatic: دستوراتی که در زمان مشخصی اجرا می شوند. مثل: at, cron و…..
Daemon: دستوراتی که سرویس های سیستم را شامل می شوند. مثل: NFS, SSH, HTTP و …..
Task structure: هستۀ سیستم عامل برای هر فرایند ساختاری در نظر می گیرد که تمام اطلاعات آن فرایند در آن ساختار قرار می گیرد. این ساختار را که در هسته واقع شده است Task Struct می نامند.
Fork: به این معنا است که یک فرایند، فرایند دیگری را ایجاد کند که به فرایند اول والد و دومی فرزند گفته می شود. به عبارت بهتر یک کپی از فرایند اول در جای دیگری از حافظه کپی می شود ولی شناسه این دو فرایند با هم متفاوت است.
□(→┴(P1 fork P2) )
مراحل اجرای فرایند به این شکل است که ابتدا فرایند والد، فرایند فرزند را ایجاد کرده و سپس خودش به حالت خواب (Sleep) می رود. فرایند فرزند پس از اینکه کارش تمام شد اقدام به بیدارکردن فرایند والد و از بین بردن خود می کند که این مراحل به صورت زیر هستند:
Create child process
Execute child process
Terminate child process
وضعیت های مختلف فرایند: عموماً هر یک از فرایندهای سیستم در یکی از وضعیت های زیر قرار دارند که عبارتند از:
Running: یعنی فرایند اجرا شده یا در صف اجرا قرار دارد.
Waiting: فرایند منتظر است تا از طریق یک ورودی/ خروجی مثل صفحه کلید وارد صف شود.
Stopped: در این حالت فرایند به طور کامل از بین نمی رود و تنها در حالت انتظار باقی می ماند.
Zom bit: در این حالت فرایند از بین رفته اما منابعی که به آن تخصیص داده شده، هنوز آزاد نشده است.
زمان بندی فرایندها: در لینوکس برای زمان بندی فرایندها از الگوریتم(Round Robin)RR استفاده می شود. این الگوریتم به این صورت عمل می کند که برای هر فرایند یک بازۀ زمانی اختصاص داده می شود تا در آن کارش را انجام دهد. چنانچه فرایند در آن بازه زمانی کارش تمام نشود باید منتظر بازه زمانی بعدی بماند و این سیستم عامل است که در حین سوئیچ کردن بین فرایندها تعیین می کند که بازه بعدی متعلق به کدام فرایند باشد.
سیستم فایل /proc: این شاخه یک فایل سیستم منطقی در RAM است که هیچ فضایی بر روی دیسک سخت اشغال نمی کند. این شاخه به صورت پویا عمل می کند و شامل فرایندهای در حال اجرا است و برای هر فرایند در حال اجرا یک شاخه در این مسیر ایجاد می شود. نام این شاخه ها در واقع اعدادی است که این اعداد همان شناسه فرایند ها است. در شاخه مربوط به هر فرایند در این مسیر فایل های مختلفی وجود دارند که هر یک حاوی اطلاعاتی شامل وضعیت و مشخصات آن فرایند هستند. برخی از انها عبارتند از:
/proc/environ: متغیرهای محیطی مربوط به هر فرایند در این فایل قرار دارد.
/proc/ƒd: فایل هایی که فرایند مذکور آنها را بازکرده است را نشان می دهد.
/proc/exe: برنامه ای که فرایند را ایجاد کرده نشان می دهد.
اما برخی از فایل ها مانند سرویس های apache, sendmail و oracle چندین فرایند را همزمان اجرا می کند. در این حالت فرایند والد و فرزند در کنار هم قرارخواهندداشت و فرایند والد به خواب نمی رود.
مدیریت پروسس های لینوکس با دستور kill و pid
در اینجا به بررسی برخی از فرامین که در سایر توزیع های گنو/ لینوکسی جهت مدیریت فرایندها به کار می روند می پردازیم:
دستور Ps : این دستور لیست فرایندهای موجود در حافظه به همراه مشخصات کنونی آنها را نمایش می دهد. شکل کلی ان تنها شامل Ps و سوئیچ های مختلف ان است. به طور مثال جهت مشاهدۀ نام، شناسه و ترمینال همه فرایندهای موجود در حافظه داریم:
Ps -A#
همچنین جهت مشاهده مشخصات کامل همه فرایندهای موجود از فرمان Ps به شکل زیر استفاده می کنیم:
Ps -alef#
در مواردی هم که قصد مشاهده همۀ فرایندهای هر یک از کاربران سیستم را دارید می توانید از سوئیچ –u به شکل زیر استفاده کنید:
Ps -u#
دستور pstree : این دستور همۀ فرایندها را به صورت یک ساختار درختی در حافظه نمایش می دهد. عمده ترین سوئیچ های این فرمان که از آنها جهت مرتب سازی فرایندها براساس فرایندهای والد و شماره شناسه آنها استفاده می شود، سوئیچ های p و n هستند.
دستور top: این دستور مانند دستور ps است، با این تفاوت که این دستور علاوه بر نمایش فرایندها و trace کردن آنها را در بازه های زمانی مشخص نیز انجام می دهد که مقدار پیش فرض آن یک ثانیه است. همچنین در حین استفاده از این دستور سوئیچ های مختلفی جهت کار با فرایندها در نظر گرفته شده است که مدیریت آنها را برای سایر کاربران تسهیل می کند. به طور مثال جهت مشاهده فرایندهای مربوط به یک کاربر مشخص کافی است پس از اجرای دستور top کلید u را زده و نام کاربر را وارد کنید. برای هر یک از فرایندها نیز الویت هایی در نظر گرفته می شود که بر اساس ان الویت ها در حافظه اجرا می شوند. مقادیر انها عددی بین 0 تا 127 است که در سه محدوده زیر تقسیم بندی می شوند:
User priority -(65-0) الویت های مربوط به کاربران سیستم
OS priority (95-66) الویت های مربوط به سیستم عامل
Reserved (127-96) الویت های رزرو شده توسط سیستم
دستور nice: اگر کاربر بخواهد الویت فرایندها را خودش تعیین کند باید از دستور nice استفاده کند. در این دستور الویت های منفی تقدم بالاتری دارند. در فرمان top به کمک کلید r می توان این الویت را تغییر(renice) داد. محدودۀ الویت مربوط به فرایندهای کاربر مقداری بین 20- و 19+ است.
مدیریت پروسس های لینوکس با دستور kill و pid
دستور kill : ببرای از بین بردن فرایندهای غیر ضروری که cpu را اشغال کرده اند باید ابتدا pid آن فرایندها را پیدا کرده و سپس آنها را با دستور kill از بین برد. از این دستور برای از بین بردن یک فرایند استفاده می شود. شکل کلی دستور به صورت زیر است:
kill #
سیگنال پیش فرض این دستور سیگنال شماره 15 که برای خاتمه فرایند است، است. از سیگنال شماره 9 نیز برای از بین بردن یک فرایند به صورت الزامی استفاده می شود. با سوئیچ 1- این فرمان نیز می توان تمام سیگنال های سیستم را مشاهده کرد. عموماً ساده ترین روش جهت از بین بردن یک فرایند خاص، پیدا کردن PID آن توسط فرمان Ps و ارسال سیگنال مناسب به آن توسط فرمان kill است. به طور مثال جهت کسب PIDبرنامع xmms بدین شکل عمل می کنیم:
Ps -A | grep xmms#
به جای استفاده از دو فرمان فوق می توان از فرمان pgrep نیز استفاده کردکه به عنوان ورودی به آن تنها xmms را وارد می کنیم.
در مواردی هم که چندین فرایند همنام در سیستم وجود دارند و قصد از بین بردن همگی آنها را داریم از فرمان killall استفاده می کنیم. به طور مثال جهت از بین بردن فرایندهای oracle موجود در سیستم خواهیم داشت:
killall -9 oracle#
مدیریت پروسس های لینوکس با دستور kill و pid