شما برای مطالعه این مقاله فقط 11 دقیقه وقت نیاز دارید

list-linux-process
دسته بندی : آموزش لینوکس

نحوه لیست کردن برنامه ها و فرایندهای در حال اجرا در لینوکس

5/5 - (2 امتیاز)

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

مالتی تسکینگ یا چند وظیفه ای از ویژگی های اصلی سیستم های لینوکس مدرن است که باعث می شود فرایندهای متعددی به صورت همزمان اجرا شوند و شما با استفاده از دستوراتی مثل ps و top می توانید شروع به نظارت فرایندها و بهینه سازی عملکرد سیستم خود کنید.

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

آشنایی با فرایندهای لینوکس

فرایند، حالت اجرا شده یک برنامه است. وقتی یک برنامه را از طریق خط فرمان یا رابط گرفیکی باز می کنید، در واقع فرایند مربوط به آن را ایجاد می کنید. مثلاً فرایند httpd برای نمایش صفحات وب استفاده می شود و فرایند mysqld هم سرویس پایگاه داده را ارائه می دهد.

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

فرایندها می توانند در پیش زمینه یا پس زمینه اجرا شوند و این فرایندهای در حال اجرای لینوکس اطلاعات خاص خودشان را دارند که شناسه یا PID از مهم ترین آنهاست. 

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

نحوه مشاهده لیست فرایندهای در حال اجرای لینوکس

برای لیست کردن فرایندهای در حال اجرا در لینوکس می توانید از ۴ دستور استفاده کنید: htop ،top ،ps و atop.

ما هر ۳ دستور را در این آموزش پوشش داده ایم ولی علاوه بر این ها، دستورات کمکی دیگری مثل pgrep و pstree را هم معرفی کرده ایم که با استفاده از آنها می توانید لیست کردن برنامه ها و فرایندهای در حال اجرا را با کیفیت بهتری انجام دهید.

پس اگر یک سیستم لینوکس دارید که به امتیازات sudo و ترمینال آن دسترسی کامل دارید، بیایید با این دستورات لینوکس آشنا شویم:

لیست کردن فرایندها با دستور ps در لینوکس

دستور ps مخفف Process Status است که اطلاعات مربوط به فرآیندهای در حال اجرا را نشان می‌دهد.

دستور ps در لینوکس یک اسنپ شات از فرایندهای در حال اجرا ایجاد می کند و یک لیست استاتیک از فرایندهای در حال اجرا ارائه می دهد. منظور از استاتیک این است که خروجی این دستور به صورت real time تغییر نمی کند و بر خلاف Task Manager ویندوز نتایج این دستور ثابت هستند.

سینتکس این دستور به صورت زیر است:

ps options

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

می بینید که اطلاعات مربوط به فرایند ها به ۴ دسته تقسیم شده اند:

PID: شناسه فرایند

TTY: نوع ترمینال ورودی توسط کاربر

TIME: میزان استفاده از CPU

CMD: نام دستور اجرایی فرایند موردنظر

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

چند مورد از مهم ترین این آپشن ها عبارت اند از:

a لیست فرایندهای در حال اجرا توسط تمام کاربران سیستم لینوکس را نشان می دهد.

u اطلاعات دیگری مثل میزان مصرف حافظه، کد وضعیت فرایند، مالک فرایند و زمان شروع فرایند را به خروجی اضافه می کند.

T کل فرایندهای مرتبط با ترمینال فعلی را نشان می دهد.

r فقط لیست فرایندهای در حال اجرا را نشان می دهد.

x برای لیست کردن فرایندهای در حال اجرا بدون ترمینال کنترلی (tty) استفاده می شود. فرایندهایی که موقع بوت یا در پس زمینه اجرا می شوند جزو خروجی دستور ps با آپشن x هستند.

j- خروجی را در قالب jobs نشان می دهد. 

C- برای تعریف اسم فرایند استفاده می شود تا فقط اطلاعات مربوط به آن فرایند را نشان دهد.

u- برای تعریف یک کاربر و لیست کردن فرایندهای در حال اجرا توسط آن استفاده می شود.

* u را با U- اشتباه نگیرید.

* U- برای تعریف کاربر واقعی با id مشخص و u- هم برای تعریف کاربر effective استفاده می شود.

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

man ps

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

مثلاً دستور زیر دسته بندی فرایندهای در حال اجرا را به صورت زیر انجام می دهد:

ps aux

دستور ps با آپشن های اضافی

همانطور که در خروجی هم می بینید، ستون های جدیدی هم به خروجی اضافه شده اند:

USER: اسم کاربر مربوط به فرایند

CPU%: درصد استفاده از CPU

MEM%: درصد استفاده از حافظه

VSC: کل فضای مجازی استفاده شده توسط فرایند (بر حسب کیلوبایت)

RSS: بخشی از حافظه که توسط فرایند موردنظر در حافظه اصلی نگهداری شده

STAT: وضعیت فرایند

START: زمان شروع فرایند

اگر می خواهید همین خروجی را با ترتیب سلسله مراتبی ببینید، می توانید آپشن j را هم به دستور اضافه کنید:

ps -axjf

برای لیست کردن برنامه ها و فرایندهای در حال اجرا توسط یک کاربر خاص می توانید از آپشن U استفاده کنید:

ps -U Asam_user 

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

ps -C httpd 

یا اینکه خروجی را در grep پیپ کنید و به راحتی خروجی را بر اساس نام فرایند فیلتر کنید:

ps aux | grep httpd

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

دستور top در لینوکس برای لیست کردن برنامه های در حال اجرا

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

دستور top بر خلاف دستور ps، خروجی را به صوت real time نشان می دهد و هر ۳ ثانیه یک بار خروجی را به روز می کند. پس موقع بررسی فرایندهای در حال اجرا شاهد تغییرات و بروزرسانی های جدید هم خواهید بود. 

سینتکس دستور top به صورت زیر است:

top options

اگر این دستور را بدون آپشن اجرا کنید، خروجی به صورت زیر خواهید بود:

top 

دستور top

PID: شناسه فرایند

USER: کاربر اجرا کننده فرایند مورد نظر

PR: اولویت زمان بندی برای فرایند.

NI: اولویت فرایند (هر چه قدر عدد پایین تر نشان دهنده اولویت بالاتر)

VIRT: مقدار حافظه مجازی استفاده شده توسط فرایند

RES: مقدار حافظه فیزیکی استفاده شده توسط فرایند

SHR: کل حافظه مشترک استفاده شده توسط فرایند

S: وضعیت فرایند – R (در حال اجرا) یا S (بیکار)

CPU٪: درصد استفاده از CPU

MEM٪: درصد استفاده از حافظه

TIME: مقدار کل استفاده از CPU

COMMAND: دستور شروع کننده فرایند

گفتیم که دستور top حالت real time دارد به همین خاطر برای تعامل با خروجی این دستور می توانید از آپشن های زیر استفاده کنید.

کلیک کنید  آموزش مجوزهای دسترسی فایل در لینوکس

به این صورت که بعد از نمایش لیست خروجی، کافیست کلید موردنظر را فشار دهید تا تعامل موردنظر را با خروجی برقرار کنید.

k: کشتن یک فرایند 

  • از لیست فرایندهای در حال اجرا، شناسه فرایند موردنظر را پیدا کنید.
  • همینطور که خروجی در حال بروزشدن است، کلیک k را فشار دهید و شناسه فرایند را وارد کنید.
  • بعد اینتر را بزنید. y را وارد کنید و دوباره اینتر بزنید تا این کار خود را تایید کنید. 

r: تغییر اولویت یک فرایند 

  • فرایند موردنظر خود را از لیست خروجی پیدا کنید و شماره آن را یادداشت کنید.
  • کلید r را فشار دهید و شماره فرایند موردنظر را وارد کنید.
  • اینتر را بزنید و بعد اولویتی که برای آن در نظر دارید را وارد کنید و مجدداً اینتر را بزنید.

d یا s: تغییر نرخ تازه سازی خروجی (برحسب ثانیه)

  • کلید d را فشار دهید.
  • نرخ موردنظر خود را بر حسب ثانیه وارد کنید و بعد اینتر را بزنید.

M: مرتب سازی خروجی بر اساس مصرف حافظه

N: مرتب سازی لیست فرایندهای در حال اجرا بر اساس ترتیب شماره فرایند

z: نمایش فرایندهای در حال اجرا به صورت رنگی

c: نمایش مسیر مطلق یک فرایند

h: نمایش پنجره help برای دستورات و آپشن های کمکی

CTRL+C یا q: متوقف سازی دستور top

توجه داشته باشید که همه آپشن های بالا نسبت به بزرگ یا کوچک بودن حروف حساس هستند پس موقع استفاده از آنها، حواستان به وضعیت دکمه caps lock باشد.

لیست فرایندهای در حال اجرا با دستور htop در لینوکس

هر دو دستور top و htop، اطلاعات یکسانی را به صورت real time ارائه می دهند با این تفاوت که دستور htop امکانات و ویژگی های کاربرپسندتری را در اختیار شما قرار می دهد. حرکت به صورت افقی و عمودی و انتخاب فرایند موردنظر با ماوس (بدون نیاز به به خاطر سپردن PID) از مهم ترین ویژگی های این دستور هستند.

اکثر توزیع های لینوکس مجهز به دستور htop نیستند به همین خاطر بهتر است قبل استفاده از این دستور آن را نصب کنید:

در Ubuntu/Debian

sudo apt-get install htop

در CentOS/RHEL/Fedora

sudo dnf install htop

بعد از این که این ابزار را نصب کردید، کافیست با اجرای دستور htop به لیست فرایندهای در حال اجرا دست پیدا کنید:

htop

دستور htop

میبینید که دسته بندی خروجی مثل دستور top است ولی آپشن هایی که برای تعامل با خروجی استفاده می شوند، فرق دارند.

F1: باز کردن پنجره help

F2: باز کردن پنجره setup دستور htop

F3: جستجوی یک فرایند

  • F3 را فشار دهید.
  • اسم فرایند یا دستور را وارد کنید و اینتر را بزنید.

F4: فیلترسازی فرایندها بر اساس اسم

  • F4 را فشار دهید.
  • رشته متنی مربوط به اسم فرایند یا دستور را وارد کنید و اینتر را بزنید.

F5: نمایش فرایندها به صورت نمای درختی

F6: مرتب سازی فرایندهای در حال اجرا بر اساس یک ستون

  • F6 را فشار دهید.
  • ستون موردنظر خود را انتخاب کنید و اینتر را بزنید.

F7: ارتقا اولویت یک فرایند (nice value – ۱)

(nice value پایین تر = اولویت بالاتر)

  • با استفاده از ماوس یا تاچ پد، فرایند موردنظر را انتخاب کنید. 
  • F7 را فشار دهید و اینتر را بزنید.

F8: کاهش اولویت یک فرایند ( nice value + ۱)

  • با استفاده از ماوس یا تاچ پد، فرایند موردنظر را انتخاب کنید. 
  • F8 را فشار دهید و اینتر را بزنید.

F9: کشتن فرایند

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

دکمه های جهت دار: اسکرول به صورت عمومی و افقی

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

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

دستور atop هم از خانواده top است و برای نظارت منابع سیستم استفاده می شود. با این دستور یک گزارش کامل از فعالیت تمام فرایندهای سیستم یا سرور خود دریافت خواهید کرد. 

میزان استفاده از CPU، حافظه، Swap، دیسک و شبکه از ستون های خروجی این دستور هستند که هر ۱۰ ثانیه یک بار بروز می شوند و حالت real time دارند.

محاسبه مجموع منابع مصرفی توسط فرایندها و کاربران هم اسم، برجسته کردن منابع مهم و استفاده از کرنل netatop برای مانیتور tcp، udp و پهنای باند شبکه از مهم ترین مزایایی هستند که باعث جذابیت این دستور شده اند.

برای استفاده از این دستور، ابتدا باید آن را نصب کنید:

در اوبونتو/دبیان

sudo apt install atop

در CentOS/RHEL/Fedora

sudo dnf install atop

بعد این که این ابزار را نصب کردید، کافیست دستور atop را اجرا کنید:

atop

دستور atop برای لیست کردن فرایندهای در حال اجرا

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

PID: شناسه فرایند

SYSCPU: میزان CPU مصرفی توسط فرایند هنگام مدیریت سیستم

USRCPU: میزان CPU مصرفی توسط فرایند هنگام اجرا در حالت کاربر

VGROW: مقدار حافظه مجازی فرایند بعد از آخرین بروزرسانی خروجی

RGROW: مقدار حافظه فیزیکی فرایند بعد از آخرین بروزرسانی خروجی

RUID: شناسه کاربر اجرا کننده فرایند

ST: وضعیت فعلی فرایند

EXC: کد خروج پس از پایان فرایند

THR: تعداد نخ یا thread های استفاده شده توسط فرایند

S: وضعیت فعلی نخ اصلی فرایند

CPUR: تعداد پردازنده های استفاده شده توسط فرایند

CPU: درصد CPU استفاده شده توسط فرایند

CMD: نام دستور شروع کننده فرایند

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

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

atop options

این آپشن ها عبارت اند از:

a-: نمایش فرایندهای در حال اجرا

c-: نمایش خط فرمان هر فرایند

d-: نمایش اطلاعات دیسک

L-: نمایش مقدار مصرفی تمام منابع به صورت میانگین در هر ثانیه

m-: نمایش اطلاعات حافظه

n-: نمایش اطلاعات شبکه

s-: نمایش اطلاعات زمانبندی فرایند

v-: نمایش خروجی verbose

y-: نمایش thread های جداگانه

آپشن های تعاملی دیگری هم هستند که می توانید در خروجی دستور atop اعمال کنید:

a: مرتب سازی خروجی بر اساس فعال ترین منابع

c: مرتب سازی خروجی بر اساس میزان مصرف CPU

d: مرتب سازی خروجی بر اساس فعالیت دیسک

m: مرتب سازی بر اساس میزان مصرف حافظه

n: مرتب سازی بر اساس فعالیت شبکه

حالا که با اصلی ترین دستورات لیست کردن برنامه ها و فرایندهای در حال اجرا آشنا شدیم، بیایید به چند دستور کمکی دیگر هم نگاهی بیاندازیم.

دستور pgrep برای دسترسی به شماره فرایند

نحوه کار دستور pgrep کمی با دستورات بالا فرق دارد. این دستور یک اسم یا الگو را به عنوان آرگومان دریافت می کند تا شماره فرایندهای مرتبط با آن را نشان دهد. در کل سینتکس دستور pgrep به صورت زیر است:

pgrep [options] pattern

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

pgrep firefox

بعد هم خروجی ps را بر اساس شماره فرایند فایرفاکس فیلتر کنیم:

ps -e | grep 1439

آپشن هایی هم وجود دارند که می توانید به pgrep اضافه کنید تا رفتار این دستور را مدیریت کنید:

a-: نمایش تمام شماره های فرایندها

f-: استفاده از اسم کامل فرایند برای پیدا کردن شماره فرایند ( بدون تطابق الگو)

c-: شمارش تعداد فرایندهای مطابق با الگو

دستور pstree برای مشاهده نمای درختی فرایندها

دستور pstree برای نمایش سلسه مراتبی فرایندهای والد و فرزند استفاده می شود. در واقع، این دستور فرایندهای در حال اجرا را به صورت درختی نشان می دهد.

اگر دستور pstree را اجرا کنید، خروجی به صورت زیر خواهد بود و همه چیز از شماره فرایند ۱ که متعلق به systemd است، شروع می شود.pstree

همانطور که می بینید، این دستور اطلاعات زیادی در مورد شماره فرایند، زمان شروع و میزان استفاده از منابع نمی دهد ولی برای شناسایی فرایندهای والد و فرزند مفید است.

دستور pidof برای نمایش شناسه فرایندهای مربوط به برنامه 

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

pidof firefox

البته این دستور برای شناسایی شماره فرایند یک فرایند هم قابل استفاده است و کافیست اسم فرایند را به عنوان آرگومان بدهید و شماره فرایند آن را تحویل بگیرید.

کلام آخر

مشاهده فرایندهای در حال اجرا، یکی از مهم ترین کارهایی است که باید برای بررسی و نظارت عملکرد منابع سیستم خود انجام دهید. دستورات زیادی برای لیست کردن فرایندهای در حال اجرا وجود دارند که htop، ps و top از مهم ترین آنها هستند و اطلاعات جامع تر و کاملتری در اختیار شما قرار می دهند.

از اینکه تا انتهای مقاله با ما همراه بودید، از شما متشکریم. امیدواریم که مطالعه این مقاله برای شما مفید واقع شده باشد. در صورت داشتن هرگونه سوال، درخواست و نیاز به راهنمایی، می توانید با ثبت نظر خود، با ما وارد ارتباط شوید تا هر چه زودتر به شما پاسخ دهیم.

سوالات متداول:

این دستور آپشن خاصی برای کشتن یک فرایند ندارد ولی می توانید شماره فرایند موردنظر را از خروجی آن پیدا کرده و با استفاده از دستور kill آن را متوقف کنید.

مطالب مشابهی که شاید علاقمند باشید

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

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید