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

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

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

فرآیند لینوکس چیست؟

یک فرآیند از نظر تئوری برنامه در حال اجرا نامیده می شود. این اساساً وظیفه ای است که یک سیستم در حال حاضر روی آن کار می کند.

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

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

فرآیندها بر اساس سلسله مراتب والدین-فرزند کار می کنند. همانطور که از نام سلسله مراتب پیداست، فرآیندی که از یک دستور/برنامه آغاز می شود، فرآیند والد و فرآیند تولید شده از یک فرآیند والد، فرآیند فرزند نامیده می شود.

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

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

  1. فرآیندهای پیش زمینه
  2. فرآیندهای پس زمینه

فرآیندهای پیش زمینه

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

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

بهترین مثال برای نشان دادن این موضوع از طریق sleep فرمان این sleep دستور به کاربر اجازه نمی دهد با ترمینال تعامل داشته باشد تا زمانی که تعداد معینی از ثانیه ها سپری شود.

sleep 10
فرمان ترمینال برای خوابیدن به مدت 10 ثانیه در پیش زمینه
Utfn4bYW2zEfEniaJ4QpFXeMIC9Cru1Ex-2OyRKAk2iGo9b7UBhnEspS3STn7HNOHyfSr081dWR1YgIRYGzkAH5UhfceLH3Xt5RofCs2bKWqvSp1 kdFclakrqq2LY1zfn4kq2ECAaoL8LAApPoM3ZLKeJahVVCF4qQw
sleep دستور ترمینال در پیش زمینه اجرا می شود و ورودی کاربر را مسدود می کند

باید 10 ثانیه منتظر بمانیم تا به ترمینال دسترسی پیدا کنیم تا دستور دیگری را اجرا کنیم.

فرآیندهای پس زمینه

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

برای اجرای یک فرآیند در پس‌زمینه، یک علامت علامت (&) را در انتهای دستوری که برای شروع فرآیند استفاده می‌کنید، قرار دهید.

در اینجا یک مثال سریع برای نشان دادن این است:

بیایید اجرا کنیم sleep دستور در یک فرآیند پس زمینه در پس‌زمینه اجرا می‌شود و ترمینال را به ما برمی‌گرداند تا دستورات دیگر را اجرا کنیم.

99ky8Jj_UgNSPmaxJC1k7KOQdfbN-_hhRh31cfAxpyxECAvJFHJjuHSrRF03epnMcUn14p_-w6I4obtRHBLPmIefL8CWT14hYr4_7WI6CWT14hYr4_7WI6CWT14hYr4_7WI6CWT14hYr4_7WI6CWT14hYr4_7WI6CWT14hYr4_7WI6OFRXW6t alcOttf99gr6pyGJDgGU80hu3sMkJpJLLNu-VgbKugMiNrqnqQ
نمونه دستور ترمینال برای فرآیند پس زمینه
sleep 10 &
فرمان ترمینال برای خوابیدن به مدت 10 ثانیه در پس زمینه.

اکنون می بینیم که دستور بالا در پس زمینه اجرا می شود. این یک فرآیند با PID (19003). بنابراین می توانیم دستور دیگری را به طور همزمان اجرا کنیم (pwd فرمان).

چگونه یک فرآیند پیش زمینه را به یک فرآیند پس زمینه تغییر دهیم

اگر فرآیندی را در پیش‌زمینه شروع کنیم و بخواهیم آن را در پس‌زمینه قرار دهیم، می‌توانیم آن را با استفاده از bg فرمان بیایید ببینیم که چگونه فرآیند پیش زمینه را به پس زمینه تغییر دهیم.

پیشنهاد می‌کنیم بخوانید:  نحوه بررسی مقادیر NaN در پایتون

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

تصویر-372
خروجی فرآیند پیش زمینه

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

bg <process_id>
دستور انتقال فرآیند به پس زمینه
bg
دستور انتقال آخرین فرآیند به پس زمینه
تصویر-373
فرآیند پیش زمینه به خروجی فرآیند پس زمینه

ما می توانیم دستور تعلیق ( sudo apt update) از سرگیری در پس زمینه.

نحوه فهرست کردن فرآیندهای لینوکس

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

  1. برای اینکه بدانید کدام فرآیند زمان بیشتری را صرف می کند.
  2. برای اینکه بدانید کدام فرآیند حافظه و CPU بیشتری مصرف می کند.
  3. برای دانستن دستور آغاز شده برای یک فرآیند در حال اجرا.

برای دیدن فرآیندهایی که در حال حاضر در حال اجرا هستند، می توانیم استفاده کنیم ps دستور (وضعیت فرآیند):

ps
دستور ترمینال برای فهرست کردن فرآیندهای در حال اجرا
J0zD8uwiQQbCmoI7kCWQu8MCcoXIfQ9jhpOBnuq3G6xd7qkDxhpRhNGdS7OsLNYuZwllm0eTfsZWNCpr-tlvac38QSduFblom0flRKFg72mmzdN-iEQwp6LV000000fRKFg72mmzdN-iEQjp6VY B3lamtZow6fCIO8gMKTQ8zhcK3XNpA6AKmKcaZcdViA
ps دستوری که لیستی از فرآیندهای در حال اجرا را نشان می دهد

برای فهرست کردن خلاصه‌ای از فرآیندهای هر کاربر وارد شده، می‌توانیم از آن استفاده کنیم w فرمان این دستور ترکیبی از who، uptime و ps -a دستورات در لینوکس

w
دستور ترمینال برای فهرست کردن فرآیندهای همه کاربران وارد شده
ws5Ip77K3CiODb9gfhjRSP5VQgaegkcabCw_rFcREWfHCnBDYlevoosQagnJ4tNfIG__yAV2OIG_BjzPWdTPx9WF4tMF2PfdTixR0aYu-7oo6vZiHVRMHVMHVMHVMHVMHVMHVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVNFXVMx tTXATBybJBlHBuTld4F-94PXVOlWJhashtH_f9bkDcg
w دستوری که لیستی از فرآیندهای همه کاربران را نمایش می دهد

نحوه فهرست کردن فرآیندها در نمای درختی

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

در اینجا یک نمونه از صفحه نمایش است.

Dwa-k101f5l6-Sy3ec8BotbvFggPF4x_UjXdmWpc_YB7AsFb_iKXT-RAjzwA3GhXQI3wa5hdwRBr8hL3eUh4TnyKft_LCPgC0XYDOtLEYKFR60XYDOtLEY9VRXYDOtLEYKFR6XYDOtLEY9VXR7Rt NCssT_Qa1eclk
فرآیندهای فرزند فرآیند والد (فایرفاکس).

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

بیایید نحوه فهرست کردن فرآیند را در یک ساختار درخت مانند بررسی کنیم.

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

pstree
دستور ترمینال برای فهرست کردن فرآیندها در یک ساختار درختی
g1gTo5zkfs92067V3p01xndG6c3XOHPjpHJAZTeT1U4wP1DDLopuxPKlgunnTpFDGZwl5BFIbFuaN5oJoRtiSi9xJcKcQihn_hhNth8R_FKv3Q5ZwTJm Mxz0ZQVRk4
pstree فرآیندهای فهرست بندی دستورات در نمای درختی

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

اضافه کردن -p flag با دستور هر شاخه را با شناسه فرآیند خود نمایش می دهد.

pstree -p
دستور ترمینال برای نمایش فرآیندهای فرزند یک فرآیند والد در ساختار درختی
elX0V2qolKRLEhXmJuPc549_YdTr80Vz5t60XRucXDrYC3_LFKKRDlB_-kP_uJSYvepwX3n6_XQ8jLvzMohI76-gfhSPDO7eD1KEexqPoKdo7eD1KEexqPoKdoKbD1KEexqRq4KD1KEexqRq4KD1KD1KD1KD1KD1KD1 CjVpfTOSduGI
دستور ترمینال که لیستی از فرآیندها را در نمای درختی با PID نمایش می دهد

برای فهرست کردن فرآیند(های) فرزند یک فرآیند خاص، شناسه فرآیند را به عنوان آرگومان به آن ارسال کنید pstree فرمان

pstree 3149
دستور ترمینال برای فهرست کردن فرآیندهای شناسه فرآیند 3149
L_OeZYxLZCDFFxMqelMfvxXWc2g3eKbKlt4EPV1bPfUBGZ5-STfSv9gxSEOksHsWuufeniSgbGS1-w5DL9uzEuQhWRMb7MOXuKpIn3Nr40wBJwqVxl00w0wBJwFU000w40wBJwFw0w00 DIc6koa0Q
فهرست کردن فرآیندها در نمای درختی برای یک فرآیند خاص

قبلاً به آن اشاره کردم pstree دستور، فرآیندهای همه کاربران را فهرست می کند. ارسال نام کاربری به همراه pstree دستور فقط فرآیندهای اجرا شده توسط کاربر را فهرست می کند.

pstree root
zTEM4mk9LXPrkBs3KoJ4Y8eBzuH3blStmsX-bgk1ohMwad8LF6hsAXwzSx_aF1vDqE-SdyhhaBWQrNyeuRNN_QHCrU5SY2TFDjnfB1cKbROiBVQiXBQ6 Uk1py-Po
فهرست کردن فرآیندها در نمای درختی برای یک کاربر خاص

اسکرین شات بالا فرآیندهای در حال اجرا را نشان می دهد root کاربر.

نحوه مشاهده فرآیندهای یک برنامه خاص

بسیاری از توسعه دهندگان ممکن است با سناریوی زیر روبرو شده باشند:

در حین کار بر روی پروژه های توسعه وب، از مرورگرهایی مانند Chrome، Firefox و سایرین برای تأیید خروجی با مرورگرهای مختلف استفاده می کنیم.

برخی از توسعه دهندگان به باز کردن برگه ها ادامه می دهند و هرگز برگه های باز شده را نمی بندند. به دلیل بار زیاد (در صورت باز شدن بیش از 150 برگه)، مرورگرها گاهی اوقات پاسخ نمی دهند 😣 منجر به قطع شدن سیستم می شود. بدترین قسمت می تواند این باشد که ما نمی توانیم مرورگر را ببندیم 😂.

پیشنهاد می‌کنیم بخوانید:  روش راه اندازی هاست مجازی آپاچی CentOS 8

برخلاف ویندوز، ما در لینوکس Task Manager نداریم تا مرورگر را از بین ببرد.

این مشکل در لینوکس نیز به راحتی قابل حل است. بیایید ببینیم یک متخصص لینوکس چگونه با این سناریو برخورد می کند.

ما می دانیم که هر برنامه (از جمله مرورگر) به عنوان یک فرآیند اجرا می شود. بنابراین فقط باید شناسه فرآیند را پیدا کنید و آن را بکشید.

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

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

pidof chrome
فرمان ترمینال برای یافتن شناسه یک فرآیند
TUL8R945bAnPXPIZ61Cs6VKzDVLAoRiOGbfZWD-x4u_Jzja72eGqGTXJjC14lhNqa4uF2-jKT3ttOtBJ6f-rbaxqGtEQoI2yPPwanl1MifGtRiOI2yPPwanl1MifGCl0001Mt1FW000001Mt1F1FW001 53cJ5KkoM1j2zLxk1CKAM6X-4NMxr_14M0WWdStMC9QhfqbbRrg
دستور ترمینال برای یافتن شناسه فرآیند کروم

چگونه یک فرآیند را بکشیم

دستوری هست به نام kill در لینوکس که برای از بین بردن هر فرآیندی با ارسال PID (شناسه فرآیند) یا نام فرآیند استفاده می شود.

در اینجا نحو از kill دستور:

kill <pid/processname>
دستور دستور kill

بیایید PID کروم را ذخیره کرده و با استفاده از دستور kill آن را بکشیم:

a=$(pidof chrome)
kill $a
دستور کشتن یک فرآیند
KJP27zaj4YOe4BlWlDQskMlX5ymEUfdcATwD-yyD6LpORFMrV7uTC-E8AlvbmQXpTYNKnytLhAmBgORLpCYCRHeTVnjU9lQfIISxcmFpUJtY13T50000000000000000000000000 bAZTM6EhffPLIA9GhD8lrI3o4ysM-QWZdDLptnyEeadAM9HA
دستور ترمینال برای کشتن یک فرآیند

دستور بالا مرورگر وب کروم را از بین می برد.

نحوه فهرست کردن همه فرآیندها

ما می توانیم تمام فرآیندهای لینوکس را با استفاده از top فرمان به‌روزرسانی‌های بی‌درنگ هر فرآیند را برای همه کاربران نشان می‌دهد.

top
دستور ترمینال برای فهرست کردن تمام فرآیندها در زمان واقعی
aDFrfxMKy6yydKH81T7o4S-Z5cV552h0qTq34UH_oUuzj-Oml8CQVlzc2rrBUMNCawgMTxxePSFiI0uCTAHWVUMqaxe__JIGJFCbTn8TRoYWqzoDFHPxEPxEFM10FXFXExE1 zfSlLvcNx-qaGTqxSc9JepmJRmbE5Crd6EI52sOt6JRQ
فرمان ترمینال که تمام فرآیندها را در زمان واقعی نمایش می دهد

بیایید عنوان را درک کنیم تا داده های اساسی را درک کنیم.

  • PID یک شناسه فرآیند منحصر به فرد را نشان می دهد.
  • USER نشان دهنده نام کاربری صاحب کار است.
  • روابط عمومی نشان دهنده اولویت فرآیند است. تعداد کمتر، اولویت بیشتر است.
  • NI نشان دهنده یک ارزش خوب کار است. یک مقدار خوب منفی به معنای اولویت بالاتر است و یک مقدار مثبت مثبت به معنای اولویت کمتر است.
  • VIRT کل حافظه مجازی استفاده شده توسط کار را نشان می دهد.
  • RES نشان دهنده استفاده از RAM از یک فرآیند در کیلوبایت است.
  • SHR نشان دهنده اندازه حافظه مشترک (Kb) است که توسط یک فرآیند استفاده می شود.
  • S وضعیت فرآیند را نشان می دهد:
    د: خواب بی وقفه
    ر: در حال دویدن
    S: خوابیدن
    T: ردیابی (توقف)
    ز: زامبی
  • CPU نشان دهنده استفاده از CPU است.
  • MEM میزان استفاده از حافظه کار را نشان می دهد.
  • TIME نشان دهنده زمان CPU است.
  • COMMAND نشان دهنده دستوری است که برای شروع فرآیند استفاده می شود.

برای نمایش فرآیندهای کاربر خاص باید از پرچم استفاده کنیم -u:

top -u <username>
دستور ترمینال برای فهرست کردن فرآیندهای کاربر خاص

برای مشاهده فرآیندهای اجرا شده توسط کاربر gogosoon، دستور زیر را اجرا کنید:

top -u gogosoon
دستور ترمینال برای فهرست کردن فرآیندهای شروع شده توسط کاربر gogosoon
در DRVVanBk_djmIGtHbD-Xkf63HVjbtmmhdC39cx8AOANBHyg
خروجی ترمینال تمام فرآیندهای آغاز شده توسط کاربر gogosoon

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

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

sudo apt install gnome-system-monitor
فرمان ترمینال برای نصب برنامه مانیتورینگ سیستم

پس از نصب، فقط نام نرم افزار را در ترمینال تایپ کنید:

gnome-system-monitor
دستور باز کردن لیست فرآیندها در رابط کاربری گرافیکی

این همه فرآیندها را در یک پنجره جدید با رابط کاربری گرافیکی مناسب باز می کند:

_fiYn6xqNuqSEBnqVTkEWhOVPYKoFUxqCkEdE427eWJEsY7WTx1OwuD7p09PG0sZFqrhqdNpYCoM4vhDR7qNB1pe8-uvZVigTUJ0E6BHkzHbHyU8GH0HKHbHbHbH0LG01HbHbHbH0L00GbHbH0000HBH0LG000 ajQDb6WQU25NdDRO-U82sYrMg5kxJx7bJrxYKV5yrdlAN2xMcQ
Gnome-System-Monitor

وقتی روی هر فرآیندی کلیک راست می کنیم، اقداماتی مانند kill، stop، end و غیره را نشان می دهد.

برگه منابع ابزارهای زیر را نشان می دهد:

  1. تاریخچه CPU
  2. حافظه و تاریخچه تعویض
  3. تاریخچه شبکه
0IB18GszrBCvE8827Ml5XuxtXlMZFVbgs5PcZkEN99BIeVjO2BOaULR55yjlbLrYA-i9qURCF4JC8mpxOkZ4_HZLGTDjRUnW5jHdfKzoEBvHbsFONGDYN ZGlWM-g1XACnt_FxpN4q7Wr8DUogBsPeuMXXMluIw01z9YbFA
نمودار تاریخچه CPU
xSO96ReEMCKtAgc11bigR6jwThKyjlk0Fz8oZt6hXh5ld4Rt9WWIEtZ-TORZJ0tQFfx-lnCnH3vJjTBjzfFEulCzcAJgJqeDh8XrK3Ul3FAXVH9Y TGoWcaxUUkoTAiFMgiIuDQW4PVuMYjswFJPERQManNjiADfQ61A
نمودار تاریخچه حافظه و تعویض
Vo_9BWdfg0i_mtnCOUennGxyXwqPP_EgaiGwK8Wli7SHAGXQdtbUzu4BElWCvNkpxLLan7y3NGnlaCICiMwnRJ513_gOntCbPwT9w87husha2v6TeDpHR3NFQBQL3W3QBHQ13HQ13HQ13HQ13HQ13HQ111 iWd1ywaSSeV_xEl1FC0cotqXcytTl0vYwciJrQc6fQ
نمودار تاریخچه شبکه

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

نتیجه

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

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