למד כיצד כראוי subshells באמצעות סקריפטים

כיצד להורות subshells לרוץ במקביל ברקע

פגז הוא ממשק בסיסי להזנת פקודות במערכת לינוקס. עם זאת, ניתן להזין פקודה ישירות או לציין קובץ (script) המכיל רצף של פקודות להתבצע. פגזים מאורגנים בהיררכיה, וכל פגז יכול ליצור קליפה חדשה. הקונכייה החדשה נחשבת לתהליך ילדות - תת-קליפה של פגז האב שיוצר אותו.

כברירת מחדל, subhell תלויה בהורה שלה במובן שאם תהליך ההורה מסתיים, הסוף גם מסתיים. כל פלט מועבר מן subhell כדי פגז האב.

כיצד ליצור subshell

בתסריט shell shell, אתה יוצר subshell באמצעות סימון בסוגריים:

# (/ count /le 99) "הדקו את" $ count "(1) (count ++))) echo" הושלם "

בדוגמה, הלולאה בזמן סגורה בסוגריים, מה שגורם לה להתבצע בקטע של הקליפה שבה קובץ הסקריפט מתבצע.

הפעלת subshell ברקע

אלא אם כן אתה מציין כי subhell הוא להיות מבוצע ברקע, פגז האב מחכה את subshell כדי לסיים לפני שתמשיך עם שאר התסריט. עם זאת, אם אתה רוצה להפעיל subshells במקביל, אתה מפעיל אותם ברקע, אשר נעשה עם תו ampersand הבא הביטוי subshell, כפי שמוצג כאן:

# (/ count /le 99) "הדקו את" $ count "1 ((+ ++))

הפעלת מספר רב של subshells במקביל

אם תיצור מספר רב של תהליכי משנה כתהליכי רקע, תוכל להפעיל משימות במקביל. בדרך כלל, מערכת ההפעלה משתמשת במעבדים או ליבות שונים עבור כל תהליך ותת-תהליכים, בהנחה שיש לפחות מעבדים או ליבות רבים ככל שיהיו תהליכים. אחרת, משימות מוקצות לאותם מעבדים או ליבות. במקרה זה, המעבד או הליבה יעברו באופן רציף בין המשימות שהוקצו עד לסיום המשימות. בדוגמה הבאה יש שתי תת-תהליכים. הראשון נחשב בין 1 ל 99, והשני מ 1000 עד 1099.

# = / bin / bash echo "לפני תחילת הסעיף" (ספירה = 1 בזמן [$ count -le 99] לעשות הד "$ count" שינה 1 ((+ +))) (ספירה = 1000 בעוד [$ count -le 1099] לעשות הד "$ לספור" שינה 1 ((+ +))) עשה & הד "סיים"

השתמש בהצהרת ההמתנה כדי להודיע ​​לתהליך האב להמתין עד שתת-הפרויקטים יסתיימו לפני שתמשיך עם שאר הסקריפט:

# = / bin / bash echo "לפני תחילת הסעיף" (ספירה = 1 בזמן [$ count -le 99] לעשות הד "$ count" שינה 1 ((+ +))) (ספירה = 1000 בעוד [$ count -le 1099] לעשות הד "$ לספור" שינה 1 ((+ +))) עשה & הד לחכות "סיים"

שימושים עבור subshells

Subshells שימושיים כאשר פקודות צריך להיות מבוצע בסביבה מסוימת או בספריה. אם כל פקודה מבוצעת בקטע משנה שונה, אין שום סכנה כי הגדרות משתנות יהיו מעורבות. עם סיום, ההגדרות ואת הספרייה הנוכחית לא צריך להיות משוחזר, כמו הסביבה של תהליך האב אינה מושפעת על ידי כל אחד subprocesses שלה.

Subshells ניתן להשתמש בהגדרות פונקציה, כך שניתן לבצע מספר פעמים עם פרמטרים שונים.