اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

آنچه که شما باید درباره process ها در لینوکس بدانید

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    آنچه که شما باید درباره process ها در لینوکس بدانید

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


    همچنین توصیه میشود مطالعه کنید :

    پشت صحنه داستان ‘init’ و ‘systemd’: چرا در لینوکس ‘init’ باید جایگزین ‘systemd’ شود

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



    انواع Process ها

    اساسا دو نوع پروسس در لینوکس وجود دارد.

    - پروسس های Foreground : (همچنین با عنوان یک پروسس interactive (تعاملی) شناخته میشوند)
    این چنین process هایی از طریق یک session ترمینال شروع و کنترل میشوند. به عبارت دیگر باید یک کاربر متصل به سیستم برای شروع کردن این چنین پروسس هایی وجود داشته باشد و خودشان به صورت اتوماتیک به عنوان بخشی از Function یا service های سیستم استارت نمیشوند.

    - پروسس های Background : (همچنین با عنوان پروسس های اتوماتیک و non-interactive (غیر تعاملی) شناخته میشوند)
    این پروسس ها در حقیقت به ترمینال متصل نیستند و از ورودی هیچ کاربری به حساب نمیآیند.



    Daemon چیست ؟

    انواع خاصی از پروسس های background هستند که به هنگام startup سیستم start میشوند و همیشه به عنوان یک سرویس در حال اجرا میمانند. آنها هرگز متوقف نمیشوند، آنها به عنوان تسک های سیستمی (به عنوان سرویس) خود به خود استارت میشوند. به هر حال آنها میتوانند توسط یک کاربر و از طریق پروسس init کنترل شوند.
    پروسس ها در لینوکس







    ایجاد یک Process در Linux

    یک پروسس جدید زمانی ایجاد میشود که یک process موجود یک کپی دقیق از خودش در مموری ایجاد کند. child process محیط یکسانی همانند parent خودش خواهد داشت و تنها شماره process id متفاوت خواهد بود.

    دو راه آسان برای ایجاد یک Process جدید در لینوکس مورد استفاده قرار میگیرد.

    - استفاده از فانکشن System() :
    این روش نسبتا آسان است به هر حال این روش ناکارآمد است و ریسک ها امنیتی بارزی دارد.

    استفاده از فانکشن fork() و exec() :
    این تکنیک نسبتا پیشرفته بوده و انعطاف پذیری و سرعت بالا به همراه امنیت را بهمراه دارد.



    لینوکس چگونه Process ها را شناسایی میکند؟

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

    و یک برنامه در حقیقت به واسطه process ID یا PID آن و Process ID مربوط به parent (که PPID نامیده میشود) شناسایی میشود، بنابراین پروسس ها به دو دسته زیر گروه بندی میشوند.

    Parent Processes :
    پروسس هایی هستند که process های دیگر را در طول مدت زمان اجرای خود ایجاد میکنند.

    Child Processes :
    این پروسس ها توسط process های دیگر در طول مدت زمان اجرا ایجاد میشوند.



    پروسس Init :

    پروسس init در حقیقت مادر (parent) همه پروسس ها روی سیستم است و در حقیقت اولین برنامه ایست که به هنگام بوت شدن سیستم لینوکس اجرا میشود. این process همه پروسس های دیگر را روی سیستم مدیریت میکند و توسط خود کرنل استارت میشود بنابراین قانونا هیچ گونه پروسس parent ی ندارد.

    همیشه process id مربوط به process init عدد 1 میباشد. این پروسس همانند والدینی (parent) است که پروسس های بدون parent را سرپرستی یا به اصطلاح به فرزند خواندگی قبول میکنند.

    شما میتوانید از دستور pidof برای پیدا کردن ID یک پروسس استفاده کنیم.
    کد PHP:
    # pidof systemd
    # pidof top
    # pidof httpd 
    دستور pidof برای پیدا کردن یک process






    برای پیدا کردن process ID و parent process ID در شل جاری دستور زیر را اجرا کنید.
    کد PHP:
    $ echo $$
    $ echo 
    $PPID 
    نحوه پیدا کردن pid یک برنامه در لینوکس







    Start کردن یک Process در Linux

    به محض اینکه شما یک دستور یا برنامه را اجرا میکنید (برای مثال cloudcmd – CloudCommander) این برنامه یک پروسسی را در سیستم آغاز میکند. شما میتوانید یک پروسس Forground (یا interactive) را استارت کنید که به ترمینال و یک کاربری که میتواند به آن ورودی ارسال کند متصل شود.
    کد PHP:
    # cloudcmd 
    پراسس ها در لینوکس







    Job های Background در Linux

    برای استارت کردن یک پروسس در محیط بک گراند (یا non-interactive) از نشانه "&" استفاده میکنیم در اینجا پروسس تا زمانیکه به forground منتقل نشود از یک کاربر ورودی نمیخواند.
    کد PHP:
    # cloudcmd &
    # jobs 
    ارسال یک process به background در لینوکس





    شما همچنین میتوانید یک پروسس را با suspend کردن آن با استفاده از Ctrl + z به بک گراند ارسال کنید، این کار سیگنال SIGSTOP را به پروسس ارسال خواهد کرد تا عملیاتش را متوقف کند و به حالت idel در بیاید.
    کد PHP:
    # tar -cf backup.tar /backups/*  #press Ctrl+Z
    # jobs 
    برای اجرای مجدد دستور suspend شده بالا در background، دستور bg را استفاده میکنیم.
    کد PHP:
    # bg 
    برای ارسال یک پروسس background به forground از دستور fg به همراه job ID مورد نظر شبیه به زیر استفاده میکنیم.
    کد PHP:
    # jobs
    # fg %1 
    ارسال یک پروسس به بک گراند در لینوکس






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

    نحوه start کردن دستورات لینوکسی در Background و جدا کردن پروسس از ترمینال



    مراحلی که یک Process در Linux طی میکند

    در طول اجرا یک پروسس بسته به محیط/شرایط خود، از یک حالت به حالت دیگر تغییر میکند. در لینوکس یک پروسس مراحل زیر را طی میکند.

    Running :
    این حالت از Process زمانیست که پروسس جاری در سیستم در حال اجراست یا آماده اجرا شدن است (منتظر برای اختصاص یافتن به یکی از CPU ها)

    Waiting :
    در این حالت یک پروسس در حالت انتظار برای رخ دادن یک event یا منتظر یک ریسورس سیستم میباشد. علاوه بر این همچنین کرنل بین دو نوع پروسس های در حال انتظار تفاوت قائل میشود. پروسس های در حال انتظار که قابل لغو هستند میتوان به واسطه سیگنال ها لغو شوند و نوع دوم پروسس های در حال انتظار غیر قابل لغو که مستقیما روی شرایط سخت افزار در حال انتظار هستند و نمیتوان آنها را با استفاده از هیچ گونه event/signal لغو کرد.

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

    Zombie :
    این حالت زمانیست که یک پروسس به اصطلاح میمیرد در حقیقت پروسسی است که halt (خاموش/از بین رفته) شده اما هنوز یک ردیف در جداول process دارد.



    نحوه نمایش Process های فعال در Linux

    ابزارهای لینوکسی زیادی برای نمایش/لیست کردن پروسس های در حال اجرا روی سیستم، وجود دارد. دو نمونه از ابزارهای شناخته شده و قدیمی دستورات ps و top هستند.

    1 - دستور ps

    این دستور اطلاعات درباره مجموعه ای از پروسس های فعال روی سیستم را همانند زیر نمایش میدهد.
    کد PHP:
    # ps
    # ps -e | head 
    دستور ps برای مانیتور کردن process ها در لینوکس






    2 - دستور top - ابزار مانیتورینگ سیستم

    top یک ابزار قدرتمند است که به شما یک نمایش لحظه ای (realtime) و داینامیک از سیستم در حال اجرا همانند تصویر زیر ارائه میدهد.
    کد PHP:
    # top 
    دستور top برای مانیتور کردن پروسس ها در لینوکس






    برای مطالعه مثالهای کاربردی بیشتر از دستور top پیشنهاد میشود لینک زیر را مطالعه کنید.

    12 نمونه مثال از دستور top در linux


    3 - glances - ابزار مانیتورینگ سیستم

    glances یکی از ابزارهای مانیتورینگ نسبتا جدید در سیستم است و قابلیت های پیشرفته ای دارد.
    کد PHP:
    # glances 
    دستور glances برای مانیتور کردن process ها در لینوکس





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

    ابزار glances یک ابزار پیشرفته و realtime برای مانیتورینگ سیستم در لینوکس


    چندین ابزار مانیتورینگ مفید دیگر برای لینوکس موجود است که شما میتوانید برای لیست کردن process های فعال از آنها استفاده کنید. لینک زیر را باز کنید و درباره آنها بیشتر مطالعه کنید.
    20 دستور کامندی برای مانیتور کردن عملکرد لینوکس (به زودی)
    13 ابزار مفید برای مانیتورینگ لینوکس (به زودی)



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

    همچنین در لینوکس یکسری دستور به منظور کنترل کردن پروسس ها موجود است دستوراتی مانند kill - pkill - pgrep و killalll که در زیر چند مثال پایه درباره نحوه استفاده از آنها مشاهده میکنید.
    کد PHP:
    pgrep -u mohammad top
    kill 2308
    pgrep -u mohammad top
    pgrep -u mohammad glances
    pkill glances
    pgrep -u mohammad glances 
    نحوه کنترل پروسس ها در لینوکس






    برای یادگیری عمیق نحوه استفاده از این دستورات و kill یا خاتمه دادن به پروسس های اکتیو در لینوکس لینک های زیر را مطالعه کنید.

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

    آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس

    راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس

    چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم

    نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند

    متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس

    آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس

    نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس

    نحوه ارسال دستورات Linux به بک گراند و برگرداندن آن پروسس به ترمینال



    دقت کنید زمانیکه سیستم شما هنگ کرده است شما میتوانید از دستورات بالا برای kill کردن اپلیکیشن های بی مسئولیت در لینوکس استفاده کنید.


    ارسال Signal به Process ها

    اساسی ترین راه برای کنترل پروسس ها در لینوکس توسط ارسال سیگنال به آنهاست. چندین سیگنال وجود دارد که شما میتوانید به یک پروسس ارسال کنید برای مشاهده همه سیگنال ها دستور زیر را اجرا کنید.
    کد PHP:
    kill -
    ارسال سیگنال به پروسس ها در لینوکس





    برای ارسال یک سیگنال به یک پروسس همانطور که قبلا هم به آن اشاره کردیم از دستورات kill ،pkill و pgrep استفاده میکنیم. اما برنامه ها تنها در صورتی که به نحوی برنامه ریزی شده باشند که بتوانند این سیگنال ها را تشخیص دهند، میتوانند به سیگنال ها پاسخ دهند.

    و اکثر سیگنال ها برای استفاده داخلی توسط سیستم یا برنامه نویسان (به هنگامی که آنها کد نویسی میکنند) طراحی شده اند. در زیر سیگنال هایی که برای یک کاربر سیستمی مفید است مشاهده میکنید.

    SIGHUP 1 : هنگامی که ترمینال کنترل کننده پروسس بسته میشود این سیگنال به سمت process ارسال میگردد.

    SIGINT 2 : این سیگنال توسط ترمینال کنترل کننده پروسس زمانیکه کاربر پروسس را با فشار دادن Ctrl+c لغو میکند، به سمت process ارسال میگردد.

    SIGQUIT 3 : اگر کاربر با فشار دادن Ctrl+D یک سیگنال خروج ارسال کند این سیگنال به سمت پروسس ارسال میگردد.

    SIGKILL 9 : این سیگنال فورا یک پروسس را خاتمه داده (kill میکند) و پروسس حتی زمانی برای اجرا کردن هیچ گونه عملیات clean-up ندارد.

    SIGTERM 15 : این سیگنال مربوطه به خاتمه دادن یک برنامه است (دستور kill به صورت پیش فرض این سیگنال را ارسال خواهد کرد)

    SIGTSTP 20 : این سیگنال توسط ترمینال کنترل کننده پروسس و برای درخواست از پروسس برای متوقف کردن (terminal stop) به سمت پروسس ارسال میشود که از طریق user و با فشردن Ctrl+Z آغاز میشود.


    در زیر نمونه مثال هایی از دستور kill به منظور kill کردن اپلیکیشن firefox با استفاده از PID آن (زمانیکه فایرفاکس هنگ کرده است) را مشاهده میکنید.
    کد PHP:
    pidof firefox
    kill 9 2687
    OR
    kill -KILL 2687
    OR
    kill -SIGKILL 2687 
    برای kill کردن یک اپلیکیشن با استفاده از نام آن همانند زیر از دستورات pkill یا killall استفاده میکنیم.
    کد PHP:
    pkill firefox
    killall firefox 

    تغییر اولویت یک Process در Linux

    روی سیستم لینوکس تمام پروسس های active یک اولویت و مقدار nice مشخص به خود اختصاص میدهد. پروسس هایی با اولویت بالاتر معمولا نسبت به پروسس هایی با اولویت پایینتر CPU Time بیشتری را دریافت میکنند.

    به هر حال یک کاربر سیستم با دسترسی root میتواند با دستورات nice و renice روی این فضیه تاثیر بگذارد.

    از خروجی دستور top و در ستون NI شما میتوانید مقدار nice پروسس ها را مشاهده کنید.
    کد PHP:
    top 
    تغییر اولویت یک پراسس در لینوکس





    از دستور nice برای تعریف کردن مقدار nice برای یک پروسس استفاده میکنیم. در خاطر داشته باشید که کاربران معمولی میتوانند مقدار nice را از 0 تا 20 به پروسس هایی که خودشان owner آنها هستند اختصاص دهند.

    تنها کاربر root میتواند مقدارهای منفی برای nice استفاده کند.

    برای renice کردن اولویت یک پروسس همانند زیر از دستور renice استفاده میکنیم.
    کد PHP:
    renice +8  2687
    renice +8  2103 


    در زیر میتوانید چندین مقاله مفید درباره بررسی نحوه مدیریت و کنترل پروسس های لینوکسی را مطالعه فرمایید.

    مدیریت Process های لینوکسی : Boot, Shutdown و هر پروسسی که ما بین این دو میباشد. (به زودی)

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

    آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس

    راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس

    چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم

    نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند

    متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس

    آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس

    نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس



    اگر هرگونه سوال یا ایده ی بهتری دارید در همین پست با ما به اشتراک بگذارید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 11-01-2021, 01:52 AM.
    Instagram : https://www.instagram.com/iranlinuxforum

    Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

    Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
    Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
    Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
    LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

    Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی
در حال انجام ...
X