تکنولوژی

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

فرمان ps در لینوکس برای بررسی پردازش های در حال اجرا کاربرد دارد. می توانید درصد استفاده از رم،درصد استفاده از CPU، شناسه ی پردازش و نام دستور مربوط به پردازش و اطلاعات جزئی تر مثل نام کنسولی که کاربر لاگین کرده را به کمک فرمان ps پیدا کنید و در ادامه پردازش ها را مدیریت کنید.

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

مدیریت پردازش ها در لینوکس با دستور ps

کرنل یا هسته، قلب تپنده ی سیستم عامل های شبیه Unix و تمام توزیعات لینوکس است. یکی از وظایف اصلی کرنل، استفاده از حافظه یا RAM و زمان پردازنده است. می بایست در هر لحظه این موارد بررسی و مدیریت شود و به پردازش های مختلف به شکل بهینه ای تخصیص پیدا کند. برخی پردازش ها اولویت بیشتری دارند و برخی کم اهمیت تر هستند و در هر لحظه نیز ممکن است اولویت ها تغییر کند.

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

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

لیست کردن پردازش ها در Linux با ps

ساده ترین حالت کاربرد دستور ps، اجرا کردن آن در اپلیکیشن ترمینال است، بدون هیچ آپشنی!

ps

خروجی دستور فوق یک لیست از پردازش ها است:

چهار ستون لیست موارد زیر است:

  • PID: شناسه یا شماره ای که به هر پردازش اختصاص داده می شود.
  • TTY: نام کنسولی که کاربرد در آن لاگین کرده است.
  • TIME: مدت زمان پردازنده که به پردازش اختصاص پیدا کرده است که در واقع میزان استفاده از CPU  است.
  • CMD: نام دستوری که پردازش را اجرا کرده است.

لیست کردن پردازش های همه ی کاربران

برای چک کردن تمام پردازش ها، می توانید از دستور ps  به همراه آپشن -e استفاده کنید که در این صورت پردازش های همه ی حساب های کاربری نیز لیست می شود. البته لیست پردازش ها در این صورت بسیار طولانی می شود چرا که در توزیعات مختلف لینوکس، تعداد زیادی حساب کاربری به صورت پیش فرض وجود دارد که صرفاً برای اجرا کردن پردازش های خاصی کاربرد دارند.

بد نیست پس از دستور ps -e از دستور less استفاده کنید تا چک کردن لیست ساده تر شود:

ps -e | less

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

همان طور که مشاهده می کنید در ستون TTY، علامت ? ذکر شده که به این معنی است که برخی پردازش ها از طریق اجرای یک دستور در Terminal آغاز به کار نکرده اند.

نمایش نمودار درختی پردازش ها

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

ps -eH | less

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

برای بهتر شدن ظاهر لیست، می توانید از آپشن –forest استفاده کنید که خطوطی را به نمودار اضافه می کند:

ps -eH –forest | less

آندرلاین یا ـ و بک اسلش یا علامت \ درک کردن نمودار را ساده تر می کند:

لیست کردن پردازش ها با جستجوی نام توسط دستور ps  و grep

می توانید دستور ps را در ترکیب با دستور grep استفاده کنید و با این روش نام یک پردازش را سرچ کنید. به عنوان مثال با اجرا کردن دستور زیر، هر پردازشی که در نام آن firefox موجود باشد لیست می شود:

ps -e | grep firefox

ممکن است یک پردازش یا چند پردازش مربوط به Firefox موجود باشد.

دستور ps و ستون  های متنوع اطلاعات پردازش ها

برای نمایش اطلاعات کامل تر می توانید ستون های اطلاعات پردازش ها را با آپشن -f یا full-format کامل کنید:

ps -ef | less

خروجی دستور فوق به این صورت است:

ستون های اطلاعات شامل موارد زیر است:

  • UID: شناسه ی کاربری که مالک پردازش است.
  • PID: شناسه ی پردازش
  • PPID: شناسه ی پردازش بالادست و در واقع پردازش اجراکننده ی یک پردازش دیگر است.
  • C: تعداد فرزندان و به عبارتی تعداد پردازش های اجرا شده توسط یک پردازش
  • STIME: زمان شروع یا Start Time پردازش
  • TTY: نام کنسول کاربری که کاربر لاگین کرده است.
  • TIME: زمان پردازنده که به پردازش اختصاص پیدا کرده است.
  • CMD: دستوری که موجب اجرای پردازش شده است.

دقت کنید که آپشن -F با -f متفاوت است و به معنی extra full-format یا فرمت کامل تر است.

ps -eF | less

این بار لیست عریض تر و ستون ها بیشتر می شود و احتمالاً به اسکرول کردن افقی برای رویت کردن همه ی ستون ها کامل نیاز است!

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

و این بار ستون های زیر اضافه می شود:

 

  • SZ: یا سایز و اندازه ی صفحات تصویر پردازش در RAM
  • RSS: یا Resident set size که حافظه ی فیزیکی سوپ نشده ای است که پردازش استفاده می کند.
  • PSR: یا پردازنده ای که پردازش به آن محول شده است.

جستجوی پردازش ها با ID یا شناسه ی پردازش

می توانید پس از دستور ps از آپشن -p استفاده کنید و سپس شناسه ی پردازش را تایپ کنید تا اطلاعات مربوط به همان پردازش خاص لیست شود.

ps -p 3403

و خروجی دستور فوق ذکر مشخصات پردازشی با شناسه یا ID موردنظر است:

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

اگر منظور شما جستجو کردن چند پردازش باشد هم می توانید شناسه ها را به ترتیب و با زدن اسپیس یا فاصله بینشان، پس از ps -p تایپ کنید.

لیست کردن پردازش ها با دستور اجرای پردازش

برای سرچ کردن پردازش هایی که با دستور خاصی اجرا شده اند، می توانید از آپشن -C که مخفف Command است استفاده کنید. پس از این آپشن نام دستور مربوطه را تایپ کنید.

ps -C shutter

لیست پردازش های مربوط به کاربر خاص

آپشن بعدی -u یا user list است که پردازش های مربوط به یک حساب کاربری خاص را لیست می کند.

ps -u mary

دستور فوق پردازش های حساب کاربری به اسم mary را لیست می کند.

لیست پردازش های ترمینال های مختلف

با آپشن -t می توانید پردازش هایی که به یک TTY را بررسی کنید. اگر پس از این دستور عددی تایپ نکنید، پردازش های مربوط به ترمینال فعلی لیست می شود.

ttyps -t

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

ps -t 1

انتخاب ستون های لیست خروجی دستور ps

با استفاده از آپشن -o می توانید ستون های لیستی که با استفاده از دستور ps چاپ می شود را به صورت دلخواه انتخاب کنید. به عنوان مثال اگر فقط به دو ستون درصد استفاده از پردازنده یا pcpu و آرگومان های دستور یا args در خروجی نیاز داشته باشید، می توانید از دستور زیر استفاده کنید که در واقع بین نام این دو ستون، از ویرگول استفاده شده است:

ps -e -o pcpu,args | less

و لیست به شکل زیر کوتاه و ساده می شود:

مرتب سازی خروجی دستور ps و دیدن سنگین ترین پردازش ها

می توانید پردازش ها را به ترتیب اطلاعاتشان مرتب کنید. برای این موضوع از آپشن –sort استفاده کنید و پس از آن برای مرتب سازی از زیاد به کم، از خط فاصله و سپس نام ستون موردنظر را تایپ کنید. به عنوان مثال برای مرتب سازی بر حسب درصد استفاده از پردازنده، از –sort -pcpu استفاده کنید:

ps -e -o pcpu,args –sort -pcpu| less

همان طور که می بینید استفاده از – موجب شده که پردازش های سنگین تر در ابتدای لیست قرار بگیرند:

اگر بخواهید تنها چند پردازش صدر لیست که به عنوان مثال بیشتر از پردازنده استفاده می کنند را مشاهده کنید، می توانید دستور ps را با دستور head ترکیب کنید. به عنوان مثال با اجرای فرمان زیر، 10 پردازشی که بیشتری درصد استفاده از پردازنده را به خود اختصاص داده اند، لیست می شوند:

ps -e -o pcpu,args –sort -pcpu | head -10

و خروجی یک لیست کوتاه و ساده خواهد بود:

ستون مفید دیگر در لیست پردازش ها، ستون pmem یا Percent of Memory به معنی درصد استفاده از حافظه است. زمانی که سیستم لینوکسی کند شده است، ممکن است با کمبود رم یا پردازنده مواجه باشید و لذا این ستون نیز بسیار مفید و کاربردی است. با اجرا کردن فرمان زیر، 10 پردازش که بیشتر از پردازنده استفاده کرده اند و در درجه ی بعدی بر حسب کمترین درصد استفاده از حافظه مرتب شده اند، ذکر می شود:

ps -e -o pcpu,pmem,args –sort -pcpu,pmem | head -10

و خروجی دستور فوق که در آن ترتیب بر اساس درصد استفاده از پردازنده و سپس کمترین استفاده از رم است:

برای شناسایی ساده تر پردازش ها در لینوکس، بهتر است همواره ستون شناسه ی پردازش را نیز چک کنید. لذا با اضافه کردن یک , و نام ستون شناسه که pid است، یک ستون دیگر به لیست اضافه می کنیم:

ps -e -o pid,pcpu,pmem,args –sort -pcpu,pmem | head -10

اکنون شناسایی پردازش ها ساده تر است:

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

آموزش بستن اجباری پردازش های در لینوکس با kill و pkill و killall