یاد بگیرید چگونه با استفاده از اسکریپت های Bash به درستی اجرا کنید

نحوه آموزش Subshells برای اجرای همزمان در پس زمینه

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

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

چگونه یک Subshell ایجاد کنیم

در یک اسکریپت پوسته Bash، شما با استفاده از نماد پرانتز زیرشکنی ایجاد می کنید:

#! / bin / bash echo "قبل از شروع اشتراک" (تعداد = 1 در حالی که [$ count -le 99] echo "$ count" sleep 1 ((count ++)) انجام شده) echo "Finished"

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

اجرای Subshell در پس زمینه

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

#! / bin / bash echo "قبل از شروع" (تعداد = 1 در حالی که [$ count -le 99] echo "$ count" sleep 1 ((count ++)) انجام شده) و echo "Finished"

در حال اجرا Multiple Subshells در موازی

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

#! / bin / bash echo "قبل از شروع" (count = 1 در حالی که [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) & (تعداد = 1000 در حالی که [$ count -le 1099] echo "count count" sleep 1 ((count ++)) done) & echo "finished"

از بیانیه منتظر بمانید تا فرآیند پدر و مادر را منتظر بگذارید تا زیر پروسه ها را قبل از ادامه بقیه اسکریپت به پایان برساند:

#! / bin / bash echo "قبل از شروع" (count = 1 در حالی که [$ count -le 99] echo "$ count" sleep 1 ((count ++)) done) & (تعداد = 1000 در حالی که [$ count -le 1099] echo "count count" sleep 1 ((count ++)) انجام شده) و انتظار echo "پایان"

استفاده از Subshells

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

Subshells را می توان در تعریف های عملکرد استفاده کرد تا بتوان آنها را چندین بار با پارامترهای مختلف اجرا کرد.