اطلاعیه

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

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

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

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

    در این پست ابتدا مفهوم مهمی درباره مدیریت process ها در سیستم عامل لینوکس را مورد بررسی قرار میدهیم. اینکه چگونه یک پروسس از ترمینال کنترل کننده آن کاملا جدا شود. زمانی که یک Process در یک ترمینال درگیر شود دو مشکل ممکن است روی دهد :
    • ترمینال کنترل کننده دستور با دیتای خروجی زیاد و همچنین پیامهای خطا پر میشود.
    • در زمانی که ترمینال بسته شود process ترمینال به همراه تمام زیر process های آن که یکی از آنها دستور در حال اجرای ما میباشد خاتمه میابد.

    برای روبه رو با این دو مشکل شما نیاز دارید که به طور کامل یک process را از یک ترمینال جدا کنید. قبل از اینکه برای حل مشکل اقدامی انجام دهیم اجازه دهید به طور کلی نحوه اجرا کردن process ها در بک گراند را مورد بحث قرار دهیم.


    نحوه شروع کردن یک Process لینوکس یا کامند در Background

    اگر یک process از قبل در حال اجرا باشد همانند نمونه زیر از دستور tar شما به آسانی و با استفاده از Ctrl+z میتوانید آنرا stop کنید و سپس با دستور bg به ادامه اجرای دستور در بک گراند و به عنوان یک job اقدام کنید.


    توصیه میشود که مطالعه کنید : آموزش دستور tar در لینوکس برای فشرده سازی و آرشیو فایل ها به همراه 18 مثال عملی


    شما میتوانید تمام job های موجود در background را با تایپ کردن دستور jobs مشاهده کنید. به هر حال stdin, stdout, stderr مربوط به دستور همچنان به ترمینال متصل هستند.
    کد PHP:
    tar -czf home.tar.gz .$ bgjobs 
    مثال :
    کد PHP:
    [root@elastix log]# tar -czf logs-backup.tar.gz .
    ^Z
    [1]+  Stopped                 tar -czf logs-backup.tar.gz .
    [
    root@elastix log]# bg
    [1]+ tar -czf logs-backup.tar.gz . &
    [
    root@elastix log]#
    [root@elastix log]# jobs
    [1]+  Running                 tar -czf logs-backup.tar.gz . &
    [
    root@elastix log]
    شما میتوانید همچنین یک process را مستقیما از بک گراند و با استفاده از علامت ampersand "&" اجرا کنید.
    کد PHP:
    tar -czf home.tar.gz . &$ jobs 
    مثال :
    کد PHP:
    [root@elastix log]# tar -czf logs-backup.tar.gz . &
    [114051
    [root@elastix log]#
    [root@elastix log]# jobs
    [1]+  Running                 tar -czf logs-backup.tar.gz . &
    [
    root@elastix log]
    به مثال زیر توجه کنید اگر چه دستور tar به عنوان یک background job شروع شده بود یک پیغام خطا همچنان به ترمینال ارسال شد به این معنی که process هنوز هم به ترمینال کنترل کننده دستور متصل است.
    کد PHP:
    tar -czf home.tar.gz . &$ jobs 
    نحوه ارسال دستورات به بک گراند در لینوکس







    در حال اجرا نگه داشتن Process های لینوکسی بعد از خارج شدن از ترمینال

    ما از دستور disown استفاده خواهیم کرد. این دستور بعد از اینکه یک pocess اجرا و در بک گراند قرار داده میشود استفاده میگردد. کار این دستور حذف کردن یک job شل از لیست job های اکتیو میباشد، بنابراین شما از دستورهای fb و bg روی آن job مورد نظر دیگر استفاده نخواهید کرد.

    علاوه بر این زمانیکه شما ترمینال مورد نظر را میبندید job هنگ نخواهد کرد یا SIGHUP به هر یک از زیر job ها ارسال نخواهد کرد. مثال زیر درباره نحوه استفاده از diswon میباشد که یک function داخلی (built-in) بش "bash" است.
    کد PHP:
    sudo rsync Templates/* /var/www/html/files/ &$ jobs$ disown  -h  %1$ jobs 
    دستور nohup در لینوکس





    شما همچنین میتوانید از دستور nohup استفاده کنید که باعث میشود یک process بعد از خروج کاربر از شل به اجرای خود در background ادامه دهد.
    کد PHP:
    nohup tar -czf iso.tar.gz Templates/* &$ jobs 
    مثال :
    کد PHP:
    [root@callcenter-back ~]# nohup java -jar /tmp/CallMananger_jar/CallMananger.jar &
    [121249
    [root@callcenter-back ~]# nohup: ignoring input and appending output to `nohup.out'

    [root@callcenter-back ~]#
    [root@callcenter-back ~]# jobx
    -bashjobxcommand not found
    [root@callcenter-back ~]# jobs
    [1]+  Running                 nohup java -jar /tmp/CallMananger_jar/CallMananger.jar &
    [
    root@callcenter-back ~]

    جدا کردن یک Process لینوکسی از ترمینال

    کلا برای جدا کردن کامل یک process از یک terminal از فرمت دستور زیر استفاده کنید. که برای اپلیکیشن های با اینترفیس گرافیکی کاربر (GUI) همانند firefox بسیار موثرتر میباشد.
    کد PHP:
    firefox </dev/null &>/dev/null 
    در لینوکس /dev/null فایل مربوط به دیوایس خاصی میباشد که از شر همه دیتای که در آن ریخته میشود خود را خلاص میکند و به اصطلاح دیتای منتقل شده به این دیوایس دور ریخته میشود. همانطور که در دستور بالا میبینید ورودی از آن خوانده و خروجی به /dev/null ارسال میشود.


    توصیه میشود که مطالعه کنید : دستور screen در لینوکس برای مدیریت ترمینال ها به همراه 10 مثال عملی


    به طور خلاصه در حین اجرا کردن یک process متصل به ترمینال شما با چندین خط خروجی از اطلاعات پروسس و پیغام های خطا روی ترمینال تان روبه رو خواهید شد، و دوباره تکرار میکنیم زمانی که شما این چنین ترمینالی را ببندید process ترمینال و child process ها (process دستور های در حال اجرا روی ترمینال) همگی بسته خواهند شد. امیدوارم این مقاله مفید واقع شده باشه. همچنان با ما باشید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-24-2021, 06:02 PM.
    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