در این مقاله درک اساسی از پروسس ها خواهیم داشت و به صورت جامع به چگونگی مدیریت process ها در لینوکس با استفاده از دستورات خاص خواهیم پرداخت. یک پروسس در حقیقت به یک برنامه در حال اجرا تلقی میشود در واقع نمونه ی در حال اجرا از یک برنامه است که شامل ساختار آن برنامه، فراخوانی Data از فایل ها، سایر برنامه ها یا ورودی از یک کاربر در سیستم است.
همچنین توصیه میشود مطالعه کنید :
پشت صحنه داستان ‘init’ و ‘systemd’: چرا در لینوکس ‘init’ باید جایگزین ‘systemd’ شود
نحوه محدود کردن میزان استفاده مموری و مدت زمان پروسس ها در لینوکس
انواع Process ها
اساسا دو نوع پروسس در لینوکس وجود دارد.
- پروسس های Foreground : (همچنین با عنوان یک پروسس interactive (تعاملی) شناخته میشوند)
این چنین process هایی از طریق یک session ترمینال شروع و کنترل میشوند. به عبارت دیگر باید یک کاربر متصل به سیستم برای شروع کردن این چنین پروسس هایی وجود داشته باشد و خودشان به صورت اتوماتیک به عنوان بخشی از Function یا service های سیستم استارت نمیشوند.
- پروسس های Background : (همچنین با عنوان پروسس های اتوماتیک و non-interactive (غیر تعاملی) شناخته میشوند)
این پروسس ها در حقیقت به ترمینال متصل نیستند و از ورودی هیچ کاربری به حساب نمیآیند.
Daemon چیست ؟
انواع خاصی از پروسس های background هستند که به هنگام startup سیستم start میشوند و همیشه به عنوان یک سرویس در حال اجرا میمانند. آنها هرگز متوقف نمیشوند، آنها به عنوان تسک های سیستمی (به عنوان سرویس) خود به خود استارت میشوند. به هر حال آنها میتوانند توسط یک کاربر و از طریق پروسس init کنترل شوند.
ایجاد یک Process در Linux
یک پروسس جدید زمانی ایجاد میشود که یک process موجود یک کپی دقیق از خودش در مموری ایجاد کند. child process محیط یکسانی همانند parent خودش خواهد داشت و تنها شماره process id متفاوت خواهد بود.
دو راه آسان برای ایجاد یک Process جدید در لینوکس مورد استفاده قرار میگیرد.
- استفاده از فانکشن System() :
این روش نسبتا آسان است به هر حال این روش ناکارآمد است و ریسک ها امنیتی بارزی دارد.
استفاده از فانکشن fork() و exec() :
این تکنیک نسبتا پیشرفته بوده و انعطاف پذیری و سرعت بالا به همراه امنیت را بهمراه دارد.
لینوکس چگونه Process ها را شناسایی میکند؟
بدلیل اینکه لینوکس یک سیستم چند کاربره است به این معنا که کاربران متفاوت میتوانند برنامه های متنوعی را روی سیستم اجرا کنند، هر نمونه در حال اجرا از یک برنامه باید به صورت مجزا و یکتا توسط کرنل شناسایی شود.
و یک برنامه در حقیقت به واسطه process ID یا PID آن و Process ID مربوط به parent (که PPID نامیده میشود) شناسایی میشود، بنابراین پروسس ها به دو دسته زیر گروه بندی میشوند.
Parent Processes :
پروسس هایی هستند که process های دیگر را در طول مدت زمان اجرای خود ایجاد میکنند.
Child Processes :
این پروسس ها توسط process های دیگر در طول مدت زمان اجرا ایجاد میشوند.
پروسس Init :
پروسس init در حقیقت مادر (parent) همه پروسس ها روی سیستم است و در حقیقت اولین برنامه ایست که به هنگام بوت شدن سیستم لینوکس اجرا میشود. این process همه پروسس های دیگر را روی سیستم مدیریت میکند و توسط خود کرنل استارت میشود بنابراین قانونا هیچ گونه پروسس parent ی ندارد.
همیشه process id مربوط به process init عدد 1 میباشد. این پروسس همانند والدینی (parent) است که پروسس های بدون parent را سرپرستی یا به اصطلاح به فرزند خواندگی قبول میکنند.
شما میتوانید از دستور pidof برای پیدا کردن ID یک پروسس استفاده کنیم.
برای پیدا کردن process ID و parent process ID در شل جاری دستور زیر را اجرا کنید.
Start کردن یک Process در Linux
به محض اینکه شما یک دستور یا برنامه را اجرا میکنید (برای مثال cloudcmd – CloudCommander) این برنامه یک پروسسی را در سیستم آغاز میکند. شما میتوانید یک پروسس Forground (یا interactive) را استارت کنید که به ترمینال و یک کاربری که میتواند به آن ورودی ارسال کند متصل شود.
Job های Background در Linux
برای استارت کردن یک پروسس در محیط بک گراند (یا non-interactive) از نشانه "&" استفاده میکنیم در اینجا پروسس تا زمانیکه به forground منتقل نشود از یک کاربر ورودی نمیخواند.
شما همچنین میتوانید یک پروسس را با suspend کردن آن با استفاده از Ctrl + z به بک گراند ارسال کنید، این کار سیگنال SIGSTOP را به پروسس ارسال خواهد کرد تا عملیاتش را متوقف کند و به حالت idel در بیاید.
برای اجرای مجدد دستور suspend شده بالا در background، دستور bg را استفاده میکنیم.
برای ارسال یک پروسس background به forground از دستور fg به همراه job ID مورد نظر شبیه به زیر استفاده میکنیم.
همچنین شما میتوانید مقاله زیر را مطالعه فرمایید.
نحوه start کردن دستورات لینوکسی در Background و جدا کردن پروسس از ترمینال
مراحلی که یک Process در Linux طی میکند
در طول اجرا یک پروسس بسته به محیط/شرایط خود، از یک حالت به حالت دیگر تغییر میکند. در لینوکس یک پروسس مراحل زیر را طی میکند.
Running :
این حالت از Process زمانیست که پروسس جاری در سیستم در حال اجراست یا آماده اجرا شدن است (منتظر برای اختصاص یافتن به یکی از CPU ها)
Waiting :
در این حالت یک پروسس در حالت انتظار برای رخ دادن یک event یا منتظر یک ریسورس سیستم میباشد. علاوه بر این همچنین کرنل بین دو نوع پروسس های در حال انتظار تفاوت قائل میشود. پروسس های در حال انتظار که قابل لغو هستند میتوان به واسطه سیگنال ها لغو شوند و نوع دوم پروسس های در حال انتظار غیر قابل لغو که مستقیما روی شرایط سخت افزار در حال انتظار هستند و نمیتوان آنها را با استفاده از هیچ گونه event/signal لغو کرد.
Stopped :
در این حالت یک پروسس متوقف شده است که معمولا با استفاده از دریافت یک سیگنال این اتفاق رخ میدهد برای مثال یک پروسسی که دیباگ شده متوقف میشود.
Zombie :
این حالت زمانیست که یک پروسس به اصطلاح میمیرد در حقیقت پروسسی است که halt (خاموش/از بین رفته) شده اما هنوز یک ردیف در جداول process دارد.
نحوه نمایش Process های فعال در Linux
ابزارهای لینوکسی زیادی برای نمایش/لیست کردن پروسس های در حال اجرا روی سیستم، وجود دارد. دو نمونه از ابزارهای شناخته شده و قدیمی دستورات ps و top هستند.
1 - دستور ps
این دستور اطلاعات درباره مجموعه ای از پروسس های فعال روی سیستم را همانند زیر نمایش میدهد.
2 - دستور top - ابزار مانیتورینگ سیستم
top یک ابزار قدرتمند است که به شما یک نمایش لحظه ای (realtime) و داینامیک از سیستم در حال اجرا همانند تصویر زیر ارائه میدهد.
برای مطالعه مثالهای کاربردی بیشتر از دستور top پیشنهاد میشود لینک زیر را مطالعه کنید.
12 نمونه مثال از دستور top در linux
3 - glances - ابزار مانیتورینگ سیستم
glances یکی از ابزارهای مانیتورینگ نسبتا جدید در سیستم است و قابلیت های پیشرفته ای دارد.
برای بررسی یک راهنمای تکمیلی درباره استفاده از این دستور پیشنهاد میشود پست زیر را مطالعه فرمایید.
ابزار glances یک ابزار پیشرفته و realtime برای مانیتورینگ سیستم در لینوکس
چندین ابزار مانیتورینگ مفید دیگر برای لینوکس موجود است که شما میتوانید برای لیست کردن process های فعال از آنها استفاده کنید. لینک زیر را باز کنید و درباره آنها بیشتر مطالعه کنید.
20 دستور کامندی برای مانیتور کردن عملکرد لینوکس (به زودی)
13 ابزار مفید برای مانیتورینگ لینوکس (به زودی)
نحوه کنترل Process ها در لینوکس
همچنین در لینوکس یکسری دستور به منظور کنترل کردن پروسس ها موجود است دستوراتی مانند kill - pkill - pgrep و killalll که در زیر چند مثال پایه درباره نحوه استفاده از آنها مشاهده میکنید.
برای یادگیری عمیق نحوه استفاده از این دستورات و kill یا خاتمه دادن به پروسس های اکتیو در لینوکس لینک های زیر را مطالعه کنید.
دستور ps در لینوکس برای مانیتور یا پیدا کردن process ها
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
نحوه ارسال دستورات Linux به بک گراند و برگرداندن آن پروسس به ترمینال
دقت کنید زمانیکه سیستم شما هنگ کرده است شما میتوانید از دستورات بالا برای kill کردن اپلیکیشن های بی مسئولیت در لینوکس استفاده کنید.
ارسال Signal به Process ها
اساسی ترین راه برای کنترل پروسس ها در لینوکس توسط ارسال سیگنال به آنهاست. چندین سیگنال وجود دارد که شما میتوانید به یک پروسس ارسال کنید برای مشاهده همه سیگنال ها دستور زیر را اجرا کنید.
برای ارسال یک سیگنال به یک پروسس همانطور که قبلا هم به آن اشاره کردیم از دستورات kill ،pkill و pgrep استفاده میکنیم. اما برنامه ها تنها در صورتی که به نحوی برنامه ریزی شده باشند که بتوانند این سیگنال ها را تشخیص دهند، میتوانند به سیگنال ها پاسخ دهند.
و اکثر سیگنال ها برای استفاده داخلی توسط سیستم یا برنامه نویسان (به هنگامی که آنها کد نویسی میکنند) طراحی شده اند. در زیر سیگنال هایی که برای یک کاربر سیستمی مفید است مشاهده میکنید.
SIGHUP 1 : هنگامی که ترمینال کنترل کننده پروسس بسته میشود این سیگنال به سمت process ارسال میگردد.
SIGINT 2 : این سیگنال توسط ترمینال کنترل کننده پروسس زمانیکه کاربر پروسس را با فشار دادن Ctrl+c لغو میکند، به سمت process ارسال میگردد.
SIGQUIT 3 : اگر کاربر با فشار دادن Ctrl+D یک سیگنال خروج ارسال کند این سیگنال به سمت پروسس ارسال میگردد.
SIGKILL 9 : این سیگنال فورا یک پروسس را خاتمه داده (kill میکند) و پروسس حتی زمانی برای اجرا کردن هیچ گونه عملیات clean-up ندارد.
SIGTERM 15 : این سیگنال مربوطه به خاتمه دادن یک برنامه است (دستور kill به صورت پیش فرض این سیگنال را ارسال خواهد کرد)
SIGTSTP 20 : این سیگنال توسط ترمینال کنترل کننده پروسس و برای درخواست از پروسس برای متوقف کردن (terminal stop) به سمت پروسس ارسال میشود که از طریق user و با فشردن Ctrl+Z آغاز میشود.
در زیر نمونه مثال هایی از دستور kill به منظور kill کردن اپلیکیشن firefox با استفاده از PID آن (زمانیکه فایرفاکس هنگ کرده است) را مشاهده میکنید.
برای kill کردن یک اپلیکیشن با استفاده از نام آن همانند زیر از دستورات pkill یا killall استفاده میکنیم.
تغییر اولویت یک Process در Linux
روی سیستم لینوکس تمام پروسس های active یک اولویت و مقدار nice مشخص به خود اختصاص میدهد. پروسس هایی با اولویت بالاتر معمولا نسبت به پروسس هایی با اولویت پایینتر CPU Time بیشتری را دریافت میکنند.
به هر حال یک کاربر سیستم با دسترسی root میتواند با دستورات nice و renice روی این فضیه تاثیر بگذارد.
از خروجی دستور top و در ستون NI شما میتوانید مقدار nice پروسس ها را مشاهده کنید.
از دستور nice برای تعریف کردن مقدار nice برای یک پروسس استفاده میکنیم. در خاطر داشته باشید که کاربران معمولی میتوانند مقدار nice را از 0 تا 20 به پروسس هایی که خودشان owner آنها هستند اختصاص دهند.
تنها کاربر root میتواند مقدارهای منفی برای nice استفاده کند.
برای renice کردن اولویت یک پروسس همانند زیر از دستور renice استفاده میکنیم.
در زیر میتوانید چندین مقاله مفید درباره بررسی نحوه مدیریت و کنترل پروسس های لینوکسی را مطالعه فرمایید.
مدیریت Process های لینوکسی : Boot, Shutdown و هر پروسسی که ما بین این دو میباشد. (به زودی)
دستور ps در لینوکس برای مانیتور یا پیدا کردن process ها
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
اگر هرگونه سوال یا ایده ی بهتری دارید در همین پست با ما به اشتراک بگذارید.
همچنین توصیه میشود مطالعه کنید :
پشت صحنه داستان ‘init’ و ‘systemd’: چرا در لینوکس ‘init’ باید جایگزین ‘systemd’ شود
نحوه محدود کردن میزان استفاده مموری و مدت زمان پروسس ها در لینوکس
انواع Process ها
اساسا دو نوع پروسس در لینوکس وجود دارد.
- پروسس های Foreground : (همچنین با عنوان یک پروسس interactive (تعاملی) شناخته میشوند)
این چنین process هایی از طریق یک session ترمینال شروع و کنترل میشوند. به عبارت دیگر باید یک کاربر متصل به سیستم برای شروع کردن این چنین پروسس هایی وجود داشته باشد و خودشان به صورت اتوماتیک به عنوان بخشی از Function یا service های سیستم استارت نمیشوند.
- پروسس های Background : (همچنین با عنوان پروسس های اتوماتیک و non-interactive (غیر تعاملی) شناخته میشوند)
این پروسس ها در حقیقت به ترمینال متصل نیستند و از ورودی هیچ کاربری به حساب نمیآیند.
Daemon چیست ؟
انواع خاصی از پروسس های background هستند که به هنگام startup سیستم start میشوند و همیشه به عنوان یک سرویس در حال اجرا میمانند. آنها هرگز متوقف نمیشوند، آنها به عنوان تسک های سیستمی (به عنوان سرویس) خود به خود استارت میشوند. به هر حال آنها میتوانند توسط یک کاربر و از طریق پروسس init کنترل شوند.
ایجاد یک Process در Linux
یک پروسس جدید زمانی ایجاد میشود که یک process موجود یک کپی دقیق از خودش در مموری ایجاد کند. child process محیط یکسانی همانند parent خودش خواهد داشت و تنها شماره process id متفاوت خواهد بود.
دو راه آسان برای ایجاد یک Process جدید در لینوکس مورد استفاده قرار میگیرد.
- استفاده از فانکشن System() :
این روش نسبتا آسان است به هر حال این روش ناکارآمد است و ریسک ها امنیتی بارزی دارد.
استفاده از فانکشن fork() و exec() :
این تکنیک نسبتا پیشرفته بوده و انعطاف پذیری و سرعت بالا به همراه امنیت را بهمراه دارد.
لینوکس چگونه Process ها را شناسایی میکند؟
بدلیل اینکه لینوکس یک سیستم چند کاربره است به این معنا که کاربران متفاوت میتوانند برنامه های متنوعی را روی سیستم اجرا کنند، هر نمونه در حال اجرا از یک برنامه باید به صورت مجزا و یکتا توسط کرنل شناسایی شود.
و یک برنامه در حقیقت به واسطه process ID یا PID آن و Process ID مربوط به parent (که PPID نامیده میشود) شناسایی میشود، بنابراین پروسس ها به دو دسته زیر گروه بندی میشوند.
Parent Processes :
پروسس هایی هستند که process های دیگر را در طول مدت زمان اجرای خود ایجاد میکنند.
Child Processes :
این پروسس ها توسط process های دیگر در طول مدت زمان اجرا ایجاد میشوند.
پروسس Init :
پروسس init در حقیقت مادر (parent) همه پروسس ها روی سیستم است و در حقیقت اولین برنامه ایست که به هنگام بوت شدن سیستم لینوکس اجرا میشود. این process همه پروسس های دیگر را روی سیستم مدیریت میکند و توسط خود کرنل استارت میشود بنابراین قانونا هیچ گونه پروسس parent ی ندارد.
همیشه process id مربوط به process init عدد 1 میباشد. این پروسس همانند والدینی (parent) است که پروسس های بدون parent را سرپرستی یا به اصطلاح به فرزند خواندگی قبول میکنند.
شما میتوانید از دستور pidof برای پیدا کردن ID یک پروسس استفاده کنیم.
کد PHP:
# pidof systemd
# pidof top
# pidof httpd
برای پیدا کردن process ID و parent process ID در شل جاری دستور زیر را اجرا کنید.
کد PHP:
$ echo $$
$ echo $PPID
Start کردن یک Process در Linux
به محض اینکه شما یک دستور یا برنامه را اجرا میکنید (برای مثال cloudcmd – CloudCommander) این برنامه یک پروسسی را در سیستم آغاز میکند. شما میتوانید یک پروسس Forground (یا interactive) را استارت کنید که به ترمینال و یک کاربری که میتواند به آن ورودی ارسال کند متصل شود.
کد PHP:
# cloudcmd
Job های Background در Linux
برای استارت کردن یک پروسس در محیط بک گراند (یا non-interactive) از نشانه "&" استفاده میکنیم در اینجا پروسس تا زمانیکه به forground منتقل نشود از یک کاربر ورودی نمیخواند.
کد PHP:
# cloudcmd &
# jobs
شما همچنین میتوانید یک پروسس را با suspend کردن آن با استفاده از Ctrl + z به بک گراند ارسال کنید، این کار سیگنال SIGSTOP را به پروسس ارسال خواهد کرد تا عملیاتش را متوقف کند و به حالت idel در بیاید.
کد PHP:
# tar -cf backup.tar /backups/* #press Ctrl+Z
# jobs
کد PHP:
# bg
کد PHP:
# jobs
# fg %1
همچنین شما میتوانید مقاله زیر را مطالعه فرمایید.
نحوه start کردن دستورات لینوکسی در Background و جدا کردن پروسس از ترمینال
مراحلی که یک Process در Linux طی میکند
در طول اجرا یک پروسس بسته به محیط/شرایط خود، از یک حالت به حالت دیگر تغییر میکند. در لینوکس یک پروسس مراحل زیر را طی میکند.
Running :
این حالت از Process زمانیست که پروسس جاری در سیستم در حال اجراست یا آماده اجرا شدن است (منتظر برای اختصاص یافتن به یکی از CPU ها)
Waiting :
در این حالت یک پروسس در حالت انتظار برای رخ دادن یک event یا منتظر یک ریسورس سیستم میباشد. علاوه بر این همچنین کرنل بین دو نوع پروسس های در حال انتظار تفاوت قائل میشود. پروسس های در حال انتظار که قابل لغو هستند میتوان به واسطه سیگنال ها لغو شوند و نوع دوم پروسس های در حال انتظار غیر قابل لغو که مستقیما روی شرایط سخت افزار در حال انتظار هستند و نمیتوان آنها را با استفاده از هیچ گونه event/signal لغو کرد.
Stopped :
در این حالت یک پروسس متوقف شده است که معمولا با استفاده از دریافت یک سیگنال این اتفاق رخ میدهد برای مثال یک پروسسی که دیباگ شده متوقف میشود.
Zombie :
این حالت زمانیست که یک پروسس به اصطلاح میمیرد در حقیقت پروسسی است که halt (خاموش/از بین رفته) شده اما هنوز یک ردیف در جداول process دارد.
نحوه نمایش Process های فعال در Linux
ابزارهای لینوکسی زیادی برای نمایش/لیست کردن پروسس های در حال اجرا روی سیستم، وجود دارد. دو نمونه از ابزارهای شناخته شده و قدیمی دستورات ps و top هستند.
1 - دستور ps
این دستور اطلاعات درباره مجموعه ای از پروسس های فعال روی سیستم را همانند زیر نمایش میدهد.
کد PHP:
# ps
# ps -e | head
2 - دستور top - ابزار مانیتورینگ سیستم
top یک ابزار قدرتمند است که به شما یک نمایش لحظه ای (realtime) و داینامیک از سیستم در حال اجرا همانند تصویر زیر ارائه میدهد.
کد PHP:
# top
برای مطالعه مثالهای کاربردی بیشتر از دستور top پیشنهاد میشود لینک زیر را مطالعه کنید.
12 نمونه مثال از دستور top در linux
3 - glances - ابزار مانیتورینگ سیستم
glances یکی از ابزارهای مانیتورینگ نسبتا جدید در سیستم است و قابلیت های پیشرفته ای دارد.
کد PHP:
# glances
برای بررسی یک راهنمای تکمیلی درباره استفاده از این دستور پیشنهاد میشود پست زیر را مطالعه فرمایید.
ابزار glances یک ابزار پیشرفته و realtime برای مانیتورینگ سیستم در لینوکس
چندین ابزار مانیتورینگ مفید دیگر برای لینوکس موجود است که شما میتوانید برای لیست کردن process های فعال از آنها استفاده کنید. لینک زیر را باز کنید و درباره آنها بیشتر مطالعه کنید.
20 دستور کامندی برای مانیتور کردن عملکرد لینوکس (به زودی)
13 ابزار مفید برای مانیتورینگ لینوکس (به زودی)
نحوه کنترل Process ها در لینوکس
همچنین در لینوکس یکسری دستور به منظور کنترل کردن پروسس ها موجود است دستوراتی مانند kill - pkill - pgrep و killalll که در زیر چند مثال پایه درباره نحوه استفاده از آنها مشاهده میکنید.
کد PHP:
$ pgrep -u mohammad top
$ kill 2308
$ pgrep -u mohammad top
$ pgrep -u mohammad glances
$ pkill glances
$ pgrep -u mohammad glances
برای یادگیری عمیق نحوه استفاده از این دستورات و kill یا خاتمه دادن به پروسس های اکتیو در لینوکس لینک های زیر را مطالعه کنید.
دستور ps در لینوکس برای مانیتور یا پیدا کردن process ها
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
نحوه ارسال دستورات Linux به بک گراند و برگرداندن آن پروسس به ترمینال
دقت کنید زمانیکه سیستم شما هنگ کرده است شما میتوانید از دستورات بالا برای kill کردن اپلیکیشن های بی مسئولیت در لینوکس استفاده کنید.
ارسال Signal به Process ها
اساسی ترین راه برای کنترل پروسس ها در لینوکس توسط ارسال سیگنال به آنهاست. چندین سیگنال وجود دارد که شما میتوانید به یک پروسس ارسال کنید برای مشاهده همه سیگنال ها دستور زیر را اجرا کنید.
کد PHP:
$ kill -l
برای ارسال یک سیگنال به یک پروسس همانطور که قبلا هم به آن اشاره کردیم از دستورات kill ،pkill و pgrep استفاده میکنیم. اما برنامه ها تنها در صورتی که به نحوی برنامه ریزی شده باشند که بتوانند این سیگنال ها را تشخیص دهند، میتوانند به سیگنال ها پاسخ دهند.
و اکثر سیگنال ها برای استفاده داخلی توسط سیستم یا برنامه نویسان (به هنگامی که آنها کد نویسی میکنند) طراحی شده اند. در زیر سیگنال هایی که برای یک کاربر سیستمی مفید است مشاهده میکنید.
SIGHUP 1 : هنگامی که ترمینال کنترل کننده پروسس بسته میشود این سیگنال به سمت process ارسال میگردد.
SIGINT 2 : این سیگنال توسط ترمینال کنترل کننده پروسس زمانیکه کاربر پروسس را با فشار دادن Ctrl+c لغو میکند، به سمت process ارسال میگردد.
SIGQUIT 3 : اگر کاربر با فشار دادن Ctrl+D یک سیگنال خروج ارسال کند این سیگنال به سمت پروسس ارسال میگردد.
SIGKILL 9 : این سیگنال فورا یک پروسس را خاتمه داده (kill میکند) و پروسس حتی زمانی برای اجرا کردن هیچ گونه عملیات clean-up ندارد.
SIGTERM 15 : این سیگنال مربوطه به خاتمه دادن یک برنامه است (دستور kill به صورت پیش فرض این سیگنال را ارسال خواهد کرد)
SIGTSTP 20 : این سیگنال توسط ترمینال کنترل کننده پروسس و برای درخواست از پروسس برای متوقف کردن (terminal stop) به سمت پروسس ارسال میشود که از طریق user و با فشردن Ctrl+Z آغاز میشود.
در زیر نمونه مثال هایی از دستور kill به منظور kill کردن اپلیکیشن firefox با استفاده از PID آن (زمانیکه فایرفاکس هنگ کرده است) را مشاهده میکنید.
کد PHP:
$ pidof firefox
$ kill 9 2687
OR
$ kill -KILL 2687
OR
$ kill -SIGKILL 2687
کد PHP:
$ pkill firefox
$ killall firefox
تغییر اولویت یک Process در Linux
روی سیستم لینوکس تمام پروسس های active یک اولویت و مقدار nice مشخص به خود اختصاص میدهد. پروسس هایی با اولویت بالاتر معمولا نسبت به پروسس هایی با اولویت پایینتر CPU Time بیشتری را دریافت میکنند.
به هر حال یک کاربر سیستم با دسترسی root میتواند با دستورات nice و renice روی این فضیه تاثیر بگذارد.
از خروجی دستور top و در ستون NI شما میتوانید مقدار nice پروسس ها را مشاهده کنید.
کد PHP:
$ top
از دستور nice برای تعریف کردن مقدار nice برای یک پروسس استفاده میکنیم. در خاطر داشته باشید که کاربران معمولی میتوانند مقدار nice را از 0 تا 20 به پروسس هایی که خودشان owner آنها هستند اختصاص دهند.
تنها کاربر root میتواند مقدارهای منفی برای nice استفاده کند.
برای renice کردن اولویت یک پروسس همانند زیر از دستور renice استفاده میکنیم.
کد PHP:
$ renice +8 2687
$ renice +8 2103
در زیر میتوانید چندین مقاله مفید درباره بررسی نحوه مدیریت و کنترل پروسس های لینوکسی را مطالعه فرمایید.
مدیریت Process های لینوکسی : Boot, Shutdown و هر پروسسی که ما بین این دو میباشد. (به زودی)
دستور ps در لینوکس برای مانیتور یا پیدا کردن process ها
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
اگر هرگونه سوال یا ایده ی بهتری دارید در همین پست با ما به اشتراک بگذارید.