نحوه استفاده از ps ،kill و nice برای مدیریت فرآیندها در لینوکس چگونه است؟ یک سرور لینوکس مانند هر کامپیوتر مدرنی، چندین برنامه را اجرا میکند. این فرآیندها به عنوان فرایندهای فردی شناخته و مدیریت میشوند.
مدیریت فرآیندها یکی از وظایف مهم سیستم عامل لینوکس است. در لینوکس، شما میتوانید از ابزارهای مختلفی مانند ps ،kill و nice برای مدیریت و کنترل فرآیندها استفاده کنید.
در این مقاله، به نحوه استفاده از این ابزارها خواهیم پرداخت تا بتوانید با استفاده از آنها فرآیندها را مشاهده کنید، آنها را قطع کنید و اولویت اجرای آنها را تغییر دهید.
نحوه مشاهده فرآیندهای در حال اجرا در لینوکس
با استفاده از دستور زیر میتوانید تمام فرآیندهای در حال اجرا روی سرور ابری خود را مشاهده کنید.
top
با اجرای این دستور، خروجی زیر را دریافت خواهید کرد.
Output
top - 15:14:40 up 46 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1019600k total, 316576k used, 703024k free, 7652k buffers
Swap: 0k total, 0k used, 0k free, 258976k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0
8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
چندین خط اول خروجی، آمار سیستم، مانند بار CPU/حافظه و تعداد کل وظایف در حال اجرا را ارائه میدهد.
با مشاهده خروجی این دستور، میتوانید ببینید که 1 فرآیند در حال اجرا و 55 فرآیند وجود دارد که به دلیل عدم استفاده فعال از چرخههای CPU، به حالت sleeping در نظر گرفته میشوند.
باقیمانده خروجی نمایش داده شده، فرآیندهای در حال اجرا و آمار استفاده از آنها را نشان میدهد.
بهطور پیشفرض، دستور top بهصورت خودکار این موارد را بر اساس میزان مصرف CPU دسته بندی میکند، بنابراین میتوانید در ابتدا شلوغترین فرآیندها را مشاهده کنید.
بیشتر بدانید : مشاهده پورتهای باز در لینوکس
top به اجرا در پوسته شما ادامه خواهد داد تا زمانی که با استفاده از کلیدهای ترکیبی استاندارد Ctrl+C برای خروج از فرآیند در حال اجرا اقدام نمایید و آن را متوقف کنید.
این دستور یک سیگنال kill ارسال میکند و به فرآیند دستور میدهد تا در صورت امکان متوقف شود.
یک نسخه بهبود یافته از top، به نام htop، در اکثر مخازن بسته موجود است. در اوبونتو، میتوانید آن را با apt نصب کنید.
sudo apt install htop
پس از آن، میتوانید دستور htop را اجرا کنید.
htop
خروجی زیر را دریافت خواهید کرد.
Output
Mem[||||||||||| 49/995MB] Load average: 0.00 0.03 0.05
CPU[ 0.0%] Tasks: 21, 3 thr; 1 running
Swp[ 0/0MB] Uptime: 00:58:11
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
1259 root 20 0 25660 1880 1368 R 0.0 0.2 0:00.06 htop
1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 /sbin/init
311 root 20 0 17224 636 440 S 0.0 0.1 0:00.07 upstart-udev-brid
314 root 20 0 21592 1280 760 S 0.0 0.1 0:00.06 /sbin/udevd --dae
389 messagebu 20 0 23808 688 444 S 0.0 0.1 0:00.01 dbus-daemon --sys
407 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.02 rsyslogd -c5
408 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5
409 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5
406 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.04 rsyslogd -c5
553 root 20 0 15180 400 204 S 0.0 0.0 0:00.01 upstart-socket-br
امکان نمایش بهتر رشتههای مختلف CPU، آگاهی بهتر از پشتیبانی رنگ در ترمینالهای مدرن و گزینههای مرتب سازی بیشتر از دیگر ویژگیهای Htop میباشد.
Htop برخلاف top، به طور پیش فرض نصب نمیشود، اما میتوان آن را یک جایگزین به حساب آورد.
و در آخر میتوانید با فشار دادن Ctrl+C از فرآیند در حال اجرا خارج شوید.
نحوه استفاده از ps برای فهرست کردن فرآیندها
top و htop، رابط داشبورد برای مشاهده فرآیندهای در حال اجرا مشابه یک مدیر برنامه گرافیکی ارائه میدهند.
رابط داشبورد میتواند یک نمای کلی ارائه دهد، اما معمولا خروجی به طور مستقیم قابل اجرا نیست. برای این کار، لینوکس دستور استاندارد دیگری به نام ps را برای پرس و جو فرآیندهای در حال اجرا ارائه میکند.
اجرای ps بدون هیچ آرگومانی اطلاعات بسیار کمی را ارائه میدهد.
ps
خروجی زیر را دریافت خواهید کرد.
Output
PID TTY TIME CMD
1017 pts/0 00:00:00 bash
1262 pts/0 00:00:00 ps
این خروجی تمام فرآیندهای مرتبط با جلسه کاربر فعلی و ترمینال را نشان میدهد که در حال حاضر فقط پوسته bash و دستور ps را در این ترمینال اجرا میکند.
برای دریافت اطلاعات کاملتر از فرآیندهای این سیستم، میتوانید ps aux را اجرا کنید.
ps aux
با اجرای این دستور، خروجی زیر را دریافت خواهید کرد.
Output
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24188 2120 ? Ss 14:28 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 14:28 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:28 0:00 [ksoftirqd/0]
root 6 0.0 0.0 0 0 ? S 14:28 0:00 [migration/0]
root 7 0.0 0.0 0 0 ? S 14:28 0:00 [watchdog/0]
root 8 0.0 0.0 0 0 ? S< 14:28 0:00 [cpuset]
root 9 0.0 0.0 0 0 ? S< 14:28 0:00 [khelper]
دستور ps، فرایندهای متعلق به همه کاربران (صرف نظر از ارتباط ترمینال آن ها) را در قالبی خوانا نشان میدهد.
همچنین میتوانید در خروجی ps aux با استفاده از دستور grep جستجو کنید تا نام یک فرآیند خاص را به شما نمایش دهد.
کاربرد دستور grep
در ادامه مطلب نحوه استفاده از ps ،kill و nice، شما را با کاربرد دستور grep آشنا خواهیم کرد.
این دستور در مواقعی کاربردی است که فکر میکنید، یک فرآیند دچار اختلال شده است و باید آن را متوقف کنید.
ps aux | grep bash
خروجی زیر را دریافت خواهید کرد.
Output
sammy 41664 0.7 0.0 34162880 2528 s000 S 1:35pm 0:00.04 -bash
sammy 41748 0.0 0.0 34122844 828 s000 S+ 1:35pm 0:00.00 grep bash
این دستور، خروجی فرآیند grep و پوسته bash که در حال حاضر در حال اجرا است را نشان میدهد.
همچنین کل حافظه و مصرف CPU، مدت زمان کارکرد آنها و شناسه فرآیند را (در خروجی بالا هایلایت شده است)، نشان میدهد.
در سیستمهای لینوکس و یونیکس، به هر فرآیند یک شناسه فرآیند یا PID اختصاص داده میشود. این روشی است که سیستم عامل فرآیندها را شناسایی و پیگیری میکند.
دستور زیر، یک راه سریع برای بدست آوردن PID یک فرآیند است.
pgrep bash
خروجی زیر را دریافت خواهید کرد.
Output
1017
اولین فرآیند ایجاد شده در بوت که init نامیده میشود و PID آن فرآیند 1 است.
pgrep init
خروجی زیر را دریافت خواهید کرد.
Output
1
این فرآیند مسئول ایجاد هر فرآیند دیگر در سیستم است به فرایندهای بعدی تعداد PID بیشتری داده میشود.
والد یک فرآیند، فرآیندی است که مسئول ایجاد آن بوده است. فرآیندهای والد دارای یک PPID هستند که میتوانید آن را در هدر ستون بسیاری از برنامههای مدیریت فرآیند از جمله top، htop و ps مشاهده کنید.
هر گونه ارتباط بین کاربر و سیستم عامل در مورد فرایندها شامل ترجمه بین نام فرآیند و PIDها در نقطهای از عملیات است.
به همین دلیل این ابزارها همیشه PID را در خروجی خود قرار میدهند.
در ادامه مطلب نحوه استفاده از ps ،kill و nice، شما را با چگونگی استفاده از PID برای ارسال توقف، رزومه یا سایر سیگنالها به فرآیندهای در حال اجرا آشنا خواهیم کرد.
نحوه استفاده از kill برای اتمام فرآیندها
همه فرایندها در لینوکس به دستورات پاسخ میدهند. دستورات روشی در سطح سیستم عامل هستند که عملکرد برنامهها را زیرنظر دارند و در صورت لزوم خاتمه و یا اصلاح رفتار را به آنها گوشزد میکنند.
kill، رایجترین راه برای ارسال دستور توقف به یک پروسه است. در واقع این دستور برای قطع یا اتمام یک فرآیند استفاده میشود.
این دستور اجازه میدهد تا با ارسال یک سیگنال به یک فرآیند، فرآیند را متوقف کرده یا آن را به طور نرمال خاتمه دهید.
عملکرد پیش فرض kill تلاش برای از بین بردن یک فرآیند است.
kill PID_of_target_process
اجرای این دستور، سیگنال TERM را برای فرآیند ارسال میکند.
سیگنال TERM برای نشان دادن پایان یک ارتباط به کار میرود و به فرآیند خاتمه عملکرد خود را اعلام میکند.
بیشتر بدانید : لینوکس سرور در مقابل ویندوز سرور
این کار، این امکان را برای برنامه فراهم میآورد تا عملیات پاکسازی را انجام دهد و به راحتی از آن خارج شود.
اگر برنامه رفتار نادرستی داشته باشد و هنگام دریافت سیگنال TERM خارج نشود، میتوانید با اجرای دستور زیر اولویت اجرای آن را سرعت ببخشید.
kill -KILL PID_of_target_process
دستور بالا به kernel سیستم عامل ارسال میشود که فرآیند را متوقف کند. این دستور برای دور زدن برنامههایی استفاده میشود که سیگنالهای ارسال شده به آنها را نادیده میگیرند.
این کار برای دور زدن برنامههایی استفاده میشود که سیگنالهای ارسال شده به آنها را نادیده میگیرند.
هر سیگنال دارای یک شماره مرتبط است که میتواند به جای نام ارسال شود. برای مثال، میتوانید به جای «-TERM» «-15» و به جای «-KILL» «-9» را استفاده کنید.
سیگنالها فقط برای خاموش کردن برنامهها استفاده نمیشوند، بلکه میتوان از آنها برای انجام اقدامات دیگر استفاده شوند.
به عنوان مثال، بسیاری از فرآیندهایی که برای اجرای مداوم در پس زمینه طراحی شدهاند (گاهی اوقات به نام دیمونها) وقتی به آنها سیگنال HUP یا hang-up داده میشود، به طور خودکار مجدد راه اندازی خواهند شد. وب سرور آپاچی معمولاً به این صورت عمل میکند.
sudo kill -HUP pid_of_apache
دستور بالا باعث میشود که آپاچی فایل پیکربندی خود را مجددا بارگذاری کند و محتوای سرویسدهی را راه اندازی کند.
شما میتوانید تمام سیگنالهایی را که امکان ارسال با kill با علامت -l وجود دارد، فهرست کنید.
kill -l
خروجی زیر را دریافت خواهید کرد.
Output
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
اگرچه روش مرسوم ارسال سیگنالها از طریق استفاده از دستور PIDها است، اما روشهایی نیز برای انجام این کار با نامهای فرآیند منظم وجود دارد.
دستور pkill تقریباً دقیقاً مانند kill عمل میکند، اما در عوض بر روی نام فرآیند عمل میشود.
pkill -9 ping
دستور بالا معادل عبارت زیر است.
kill -9 `pgrep ping`
اگر میخواهید برای هر نمونه از یک فرآیند خاص سیگنال ارسال کنید، میتوانید از دستور killall استفاده کنید.
killall firefox
دستور بالا سیگنال TERM را برای هر نمونه از فایر فاکس در حال اجرا روی سیستم ارسال خواهد کرد.
نحوه استفاده از nice برای تنظیم اولویتهای فرآیند
اغلب، شما میخواهید تنظیم کنید که کدام فرآیندها در سرور ابری اولویت دارند. در ادامه مطلب نحوه استفاده از ps ،kill و nice به بررسی این موضوع خواهیم پرداخت.
برخی از فرآیندها ممکن است برای موقعیت شما حیاتی در نظر گرفته شوند، در حالی که برخی دیگر ممکن است هر زمان که منابع باقی مانده باشد، اجرا شوند.
لینوکس اولویت فرآیندها را از طریق مقداری به نام nice کنترل میکند.
وظایف با اولویت بالا کمتر nice در نظر گرفته میشوند، زیرا آنها منابع را نیز به اشتراک نمیگذارند. از سوی دیگر، فرآیندهای با اولویت پایین، nice هستند، زیرا فقط بر مصرف حداقل منابع اصرار دارند.
عنوان “NI” در هر ستون مقدار nice فرآیند است.
top
خروجی زیر را دریافت خواهید کرد.
[secondary_label Output]
Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1019600k total, 324496k used, 695104k free, 8512k buffers
Swap: 0k total, 0k used, 0k free, 264812k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1635 root 20 0 17300 1200 920 R 0.3 0.1 0:00.01 top
1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0
مقادیر Nice بسته به سیستم میتواند بین 19-/20- (بالاترین اولویت) و 19/20 (کمترین اولویت) باشد.
برای اجرای یک برنامه با مقدار خاص، میتوانید از دستور nice استفاده کنید.
nice -n 15 command_to_execute
این کار فقط در هنگام شروع یک برنامه جدید کار میکند.
برای تغییر مقدار nice برنامهای که در حال اجرا است، از ابزاری به نام renice استفاده میکنید.
renice 0 PID_to_prioritize
جمع بندی
مدیریت فرآیند بخش اساسی لینوکس است که تقریباً در هر زمینهای کاربردی میباشد. ابزارهایی همچون ps ،kill و nice به ما امکان کنترل و مدیریت فرآیندها را میدهند. با استفاده از این ابزارها، میتوانید فرآیندها را لیست کنید (ps)، متوقف یا پایان دهید (kill) و یا اولویت اجرای آنها را تغییر دهید (nice). در مقاله نحوه استفاده از ps ،kill و nice، به بررسی نحوه استفاده از این ابزارها پرداختهایم تا بتوانید برنامهها و سرویسهای خود را به بهترین شکل ممکن اجرا کرده و کارایی سیستم خود را افزایش دهید. با مطالعه این آموزش کاربردی شما میتوانید کنترلی بر روی فرآیندها در سیستم خود داشته و عملکرد سیستم را مدیریت کنید.
[yasr_overall_rating]