تاریخ امروز۱۴۰۳-۰۲-۲۳

نحوه استفاده از ps ،kill و nice برای مدیریت فرآیندها در لینوکس

نحوه استفاده از 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           
    ۱ root      20   0 24188 2120 1300 S  0.0  0.2   0:00.56 init               
    ۲ root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           
    ۳ root      20   0     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/0        
    ۶ root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    ۷ root      RT   0     0    0    0 S  0.0  0.0   0:00.03 watchdog/0         
    ۸ root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset             
    ۹ root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper            
   ۱۰ root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs     

چندین خط اول خروجی، آمار سیستم، مانند بار CPU/حافظه و تعداد کل وظایف در حال اجرا را ارائه می‌دهد.

با مشاهده خروجی این دستور، می‌توانید ببینید که ۱ فرآیند در حال اجرا و ۵۵ فرآیند وجود دارد که به دلیل عدم استفاده فعال از چرخه‌های 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
 ۱۲۵۹ root       20   0 25660  1880  1368 R  0.0  0.2  0:00.06 htop
    ۱ root       20   0 24188  2120  1300 S  0.0  0.2  0:00.56 /sbin/init
  ۳۱۱ root       20   0 17224   636   440 S  0.0  0.1  0:00.07 upstart-udev-brid
  ۳۱۴ root       20   0 21592  1280   760 S  0.0  0.1  0:00.06 /sbin/udevd --dae
  ۳۸۹ messagebu  20   0 23808   688   444 S  0.0  0.1  0:00.01 dbus-daemon --sys
  ۴۰۷ syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.02 rsyslogd -c5
  ۴۰۸ syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5
  ۴۰۹ syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5
  ۴۰۶ syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.04 rsyslogd -c5
  ۵۵۳ root       20   0 15180   400   204 S  0.0  0.0  0:00.01 upstart-socket-br

امکان نمایش بهتر رشته‌های مختلف CPU، آگاهی بهتر از پشتیبانی رنگ در ترمینال‌های مدرن و گزینه‌های مرتب سازی بیشتر از دیگر ویژگی‌های Htop می‌باشد.

Htop برخلاف top، به طور پیش فرض نصب نمی‌شود، اما می‌توان آن را یک جایگزین به حساب آورد.

و در آخر می‌توانید با فشار دادن Ctrl+C از فرآیند در حال اجرا خارج شوید.

آشنایی با نحوه استفاده از ps برای فهرست کردن فرآیندها
آشنایی با نحوه استفاده از ps برای فهرست کردن فرآیندها

نحوه استفاده از ps برای فهرست کردن فرآیندها

top و htop، رابط داشبورد برای مشاهده فرآیندهای در حال اجرا مشابه یک مدیر برنامه گرافیکی ارائه می‌دهند.

رابط داشبورد می‌تواند یک نمای کلی ارائه دهد، اما معمولا خروجی به طور مستقیم قابل اجرا نیست. برای این کار، لینوکس دستور استاندارد دیگری به نام ps را برای پرس و جو فرآیندهای در حال اجرا ارائه می‌کند.

اجرای ps بدون هیچ آرگومانی اطلاعات بسیار کمی را ارائه می‌دهد.

ps

خروجی زیر را دریافت خواهید کرد.

Output
  PID TTY          TIME CMD
 ۱۰۱۷ pts/0    00:00:00 bash
 ۱۲۶۲ 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
آشنایی کاربرد دستور 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
۱۰۱۷

اولین فرآیند ایجاد شده در بوت که init نامیده می‌شود و PID آن فرآیند ۱ است.

pgrep init

خروجی زیر را دریافت خواهید کرد.

Output
۱

این فرآیند مسئول ایجاد هر فرآیند دیگر در سیستم است به فرایندهای بعدی تعداد 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» «-۱۵» و به جای «-KILL» «-۹» را استفاده کنید.

سیگنال‌ها فقط برای خاموش کردن برنامه‌ها استفاده نمی‌شوند، بلکه می‌توان از آنها برای انجام اقدامات دیگر استفاده شوند.

به عنوان مثال، بسیاری از فرآیندهایی که برای اجرای مداوم در پس زمینه طراحی شده‌اند (گاهی اوقات به نام دیمون‌ها) وقتی به آن‌ها سیگنال HUP یا hang-up داده می‌شود، به طور خودکار مجدد راه اندازی خواهند شد. وب سرور آپاچی معمولاً به این صورت عمل می‌کند.

sudo kill -HUP pid_of_apache

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

شما می‌توانید تمام سیگنال‌هایی را که امکان ارسال با kill با علامت -l وجود دارد، فهرست کنید.

kill -l

خروجی زیر را دریافت خواهید کرد.

Output
۱) SIGHUP	 ۲) SIGINT	 ۳) SIGQUIT	 ۴) SIGILL	 ۵) SIGTRAP
۶) SIGABRT	 ۷) SIGBUS	 ۸) SIGFPE	 ۹) SIGKILL	۱۰) SIGUSR1
۱۱) SIGSEGV	۱۲) SIGUSR2	۱۳) SIGPIPE	۱۴) SIGALRM	۱۵) 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           
 ۱۶۳۵ root      20   0 17300 1200  920 R  0.3  0.1   0:00.01 top                
    ۱ root      20   0 24188 2120 1300 S  0.0  0.2   0:00.56 init               
    ۲ root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           
    ۳ root      20   0     0    0    0 S  0.0  0.0   0:00.11 ksoftirqd/0

مقادیر Nice بسته به سیستم می‌تواند بین ۱۹-/۲۰- (بالاترین اولویت) و ۱۹/۲۰ (کمترین اولویت) باشد.

برای اجرای یک برنامه با مقدار خاص، می‌توانید از دستور nice استفاده کنید.

nice -n 15 command_to_execute

این کار فقط در هنگام شروع یک برنامه جدید کار می‌کند.

برای تغییر مقدار nice برنامه‌ای که در حال اجرا است، از ابزاری به نام renice استفاده می‌کنید.

renice 0 PID_to_prioritize

جمع بندی

مدیریت فرآیند بخش اساسی لینوکس است که تقریباً در هر زمینه‌ای کاربردی می‌باشد. ابزارهایی همچون ps ،kill و nice به ما امکان کنترل و مدیریت فرآیندها را می‌دهند. با استفاده از این ابزارها، می‌توانید فرآیندها را لیست کنید (ps)، متوقف یا پایان دهید (kill) و یا اولویت اجرای آن‌ها را تغییر دهید (nice). در مقاله نحوه استفاده از ps ،kill و nice، به بررسی نحوه استفاده از این ابزارها پرداخته‌ایم تا بتوانید برنامه‌ها و سرویس‌های خود را به بهترین شکل ممکن اجرا کرده و کارایی سیستم خود را افزایش دهید. با مطالعه این آموزش کاربردی شما می‌توانید کنترلی بر روی فرآیندها در سیستم خود داشته و عملکرد سیستم را مدیریت کنید.

اشتراک‌گذاری

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

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