קבצי script ניהול תהליכים ב-UNIX

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
מבוא כללי למדעי המחשב תרגול 1. כתיבת התוכנה כתיבת התוכנית עצמה נעשית ע " י כתיבת קובץ טקסט רגיל אשר תוכנו מקיים את כללי שפת C כתיבת התוכנית עצמה נעשית.
דוד שוורץ, עידן זק, נטע צור וחיה כהן. הפונקציונאליות : המשתמש יבחר קובץ שעליו הוא רוצה לבצע את האנליזה, וילחץ עליו עם כפתור ימני בעכבר. יפתח תפריט ובו.
תירגול 1 אדמיניסטרציה עבודה עם t2 מערכת הקבצים ב - Unix תכנית ראשונה ב -Unix, gcc.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
תרגול 7 תסריטים ניהול תהליכים ב -UNIX לי-טל משיח נערך והורחב ע'' ודים אייזנברג.
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
חלון הפקודות מיועד לבצע פעולה אחת בכל פעם. כיצד אפשר לבצע רשימת פקודות או אפליקציות מורכבות ?
צורות נורמליות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 10.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
שאלות ממבחנים לי-טל משיח
דוד שוורץ, עידן זק, נטע צור וחיה כהן. הפונקציונאליות:  המשתמש בוחר קובץ שעליו הוא רוצה לבצע את האנליזה, ולוחץ עליו עם כפתור ימני בעכבר.  נפתח תפריט.
ברוכים הבאים למת"ם! אדמיניסטרציה מטרת הקורס: לימוד תכנון וכתיבת תוכניות מורכבות תוך שמוש בכלי פתוח תוכנה מתקדמים. אתר הבית:
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מנפה שגיאות - DEBUGGER מבוא למדעי המחשב (234114) רועי מלמד
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
ברוכים הבאים למת"ם! אדמיניסטרציה מטרת הקורס: לימוד תכנון וכתיבת תוכניות מורכבות תוך שמוש בכלי פתוח תוכנה מתקדמים. אתר הבית:
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מבני בקרה לולאות. שאלה #1 שאלה ב' – תכתוב תוכנה הכותבת את תפריט הבאה Type 1 to find the area of a circle Type 2 to find the circumference of a circle.
מבוא למדעי המחשב תרגול מספר.
תסריטים ניהול תהליכים ב-UNIX
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תחשיב היחסים (הפרדיקטים)
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
Text to speech In Mobile Phones איתי לוי. הקדמה שימוש בהודעות טקסט על המכשירים הסלולארים היא דרך תקשורת מאוד פופולארית בימינו אשר משתמשים בה למטרות רבות,
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
שיאון שחוריMilOSS-il מוטיבציה  python זה קל ו C זה מהיר. למה לא לשלב?  יש כבר קוד קיים ב C. אנחנו רוצים להשתמש בו, ולבסס מעליו קוד חדש ב python.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
שיתוף PDT בין חוטים PDT Thread A Process Descriptor File Object 1 File Object 2 File 1 File 2 pthread_create Thread B Process Descriptor ה PDT משותף לכל.
יסודות מערכות פתוחות ג ' בארה אחמד המכללה האקדמית נתניה The Awk Utility.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Tirgul 12 Trees 1.
Computer Architecture and Assembly Language
מבוא למדעי המחשב סיבוכיות.
כתיבת תסריטים ב-bash בקרת תהליכים ב-UNIX שאלות ממבחנים
SQL בסיסי – הגדרה אינדוקטיבית
תירגול 14: מבני נתונים דינאמיים
תרגול מס' 3: Data Hazards מבוסס על תרגול של מורן גביש
עבודה עם נתונים באמצעות ADO.NET
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
מבוא ל Maven אליהו חלסצ'י תכנות מתקדם תרגול מספר 3
Marina Kogan Sadetsky –
ניתוח מערכות מידע תכנות ב C#
תיכון אהל שם, רמת גן קורס PHP – הרצאה מס' 10
תזכורת על מה דיברנו שיעור שעבר? בנינו אתר אינטרנט עם כותרות
Shell Scripts בסביבת UNIX
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

קבצי script ניהול תהליכים ב-UNIX תרגול מס' 8 קבצי script ניהול תהליכים ב-UNIX לי-טל משיח litalma@cs.technion.ac.il

קבצי סקריפט קבצי script הם קבצים אשר מכילים סדרה של פקודות shell תוכניות אלו נכתבות בקובץ רגיל ולאחר מכן מורצות ישנן מספר דרכים להריץ תסריטים. דרך אחת הנה באמצעות הפקודה source. >source clean תריץ את התסריט clean במידה והקובץ clean (אשר הנו קובץ טקסט רגיל) הכיל את הפקודות הבאות: rm *.o mv ex1 ex1.old אזי לאחר ביצוע הפקודה, ימחקו כל קבצי ה object ושם הקובץ ex1 ישונה ל ex1.old .

C-shellשפת התסריטים של הגדרה ושמוש במשתנים שמוש ב File name expansion תוכניות שמושיות ב Unix – יתרונו של התסריט ב-C-shell הנו יכולתו להריץ תוכניות שכבר נמצאות במערכת בקלות. בכל מערכת unix קיים סט של תוכניות שמושיות – utilities אשר ניתן לנצלן לצורך שילובן בתסריט מבני בקרה ב C-shell תסריטים אינם תחליף לתוכנית אלא משמשים בד"כ כ-"דבק חכם" בין תוכניות קיימות גם בעת ביצוע תסריט מתבצעות כל ההחלפות בעת ניתוח שורת פקודה ע"פ אותו הסדר אשר הוצג בשיעור שעבר

CShellמבני בקרה ב- ב- CShell יש מבני בקרה הדומים לאלה אשר בשפת C לולאות משפטי תנאי קפיצה בלתי מותנת

CShell לולאות ב- repeat <count> <cshell command> חוזר על הפקודה CShell command בדיוק count פעמים. <repeat 3 echo hello world hello world כפי שרואים פקודה זו שמושית גם בצורת עבודה אינטראקטיבית.

CShell לולאות ב- while (<expression>) <cshell commands> end משפטי while: # count10 script: @ i = 0 while ($i<10) echo $i @ i++ end > source count10 1 2 3 4 5 6 7 8 9

CShell לולאות ב- foreach <variable> (<list of words>) <cshell commands> end :foreachמשפטי המשתנה מקבל את כל אחד מהערכים ברשימה לפי סדר. לכל ערך אפשרי של המשתנה מתבצעת איטרציה של הלולאה הרשימה יכולה להיות כתובה במפורש, או להתאים לתבנית בדומה לשמות של קבצים נניח כי במדריך מסוים קיימים הקבצים הבאים: amortize.c, helloworld.c, prog.c אזי, הפקודה: foreach F (*.c) echo $F end תדפיס: amortize.c helloworld.c prog.c בלולאות foreach ו- while ניתן גם להשתמש בפקודות break ו- continue כמו ב- C.

משפטי תנאי :ifמפשטי התנאים אותם ניתן לבחון במשפט ה if הינם: if (<expression>) <one cshell command> או if (<expression>) then <cshell commands> [else <cshell commands>] endif :ifמפשטי התנאים אותם ניתן לבחון במשפט ה if הינם: תנאים חשבוניים: if ($a > 0) … השוואת מחרוזות: if ($a == "kiko") … תנאים יחודיים ל c-shell: if (-d $dir) then cd $dir ….. endif בודק אם המשתנה dir מכיל שם מדריך, ואם כן עובר אליו if (-f diary) lpr diary endif בודק אם קיים קובץ "פשוט" בשם diary, אם התשובה חיובית, מדפיס אותו

משפטי תנאי - התאמה בין מחרוזות פרט להשוואה רגילה בין שתי מחרוזות (המתבצעת ע"י האופרטור ==) ניתן לבדוק התאמה בין מחרוזות באופן חלקי באמצעות האופרטור ~= בצד שמאל של האופרטור חייבת להופיע מחרוזת מלאה אך בצד ימין יכולה להופיע מחרוזת הכוללת סימנים מיוחדים כגון: $, ?, או ] [ שמשמעותם תוארה בשקפים קודמים השלילה של האופרטור ~= היא ~! . > if (end_with_z =~ *[zZ]) echo match match > if ("no point in string" !~ *.*) echo "no point" no point > if ("no point - . - in string" !~ *.*) echo "no point" > האופרטורים (<, >, >= וכד') משווים בין מספרים. האופרטורים ==, =!, ~= ~! משווים בין מחרוזות. > if (0123 != 123) echo NOT NOT

משפטי תנאי :switchמשפטי switch (<string>) case <string1>: <cshell commands> [breaksw] case <string2>: . case <string_n>: [default: <cshell commands>] endsw :switchמשפטי switch ($F) case "*.c": lpr $F breaksw case "*.o": rm $F endsw

קפיצה בלתי מותנת goto <label> משפטי goto: if (-f diary) then lpr diary else goto endprog endif if (-f diary2) then lpr diary2 endprog: אם קיים קובץ diary אז מדפיסים אותו וממשיכים, אחרת קופצים לסוף התוכנית. שמושי לטיפול בשגיאות, אך (כרגיל!) לא רצוי להשתמש ב goto באופן כללי.

הרצת קבצי סקריפט ניתן להריץ את קבצי ה script בשתי דרכים: להריץ את הקובץ בכל פעם ע"י source <file name> הקובץ מורץ בתוך ה-shell הנוכחי, ולכן יש לו גישה למשתנים שהגדרנו ושינויים שהוא יבצע במשתנים "ייזכרו" לקבוע את הקובץ כ executable פעם אחת, להריץ אותו ע"י <file name> > chmod +x myscript הופך את הקובץ myscript ל executable. כעת, הפקודה: > myscript תריץ את הקובץ myscript כקובץ script, בתוך shell חדש משל עצמו, כך ששינויים שיתבצעו למשתנים לא ייזכרו "מחוץ" להרצה

הרצת קבצי סקריפט #! /usr/local/bin/tcsh -f כל קובץ script שרוצים להריץ בצורה זו חייב להתחיל עם השורה הבאה: #! /usr/local/bin/tcsh -f באיזה shell יש להשתמש לצורך הרצת התסריט אומר ל-shell לא לקרוא את קבצי האתחול שנקראים בדרך כלל במחשבים שונים כתובת קובץ ההפעלה יכולה להשתנות. ניתן למצוא מהי באמצעות הפקודה which, שבהינתן שם של קובץ הפעלה שנמצא באחד ה-PATH-ים שה-shell מכיר, מחזירה את הכתובת המלאה שלו.

setupקבצי קבצי setup הם קבצי script מיוחדים אשר מורצים אוטומטית ע"י המערכת בזמנים מסוימים.קבצים אלו הם: .login - מבוצע עם כניסת משתמש לחשבונו .cshrc - מבוצע בהתחלת כל shell מכיון שקבצים אלה מופעלים בצורה אוטומטית בזמנים המצויינים, נהוג לאתחל בהם משתני סביבה חשובים, או להגדיר שמות חדשים לפקודות עם alias. דוגמא: < cat .cshrc set path = ($path ./) set history=40 alias ll 'ls -al' alias m 'more' alias . 'pwd' alias .. 'cd ..' alias ... 'cd ../..'

פרמטרים לקבצי סקריפט ניתן לתת פרמטרים לקבצי script. ניתן להתיחס לפרמטרים אלה בתוך קובץ ה- script כדלקמן: $0 - הפקודה עצמה $1 - הפרמטר הראשון (באופן כללי: ${n} מתייחס לפרמטר ה-n). $* - רשימת כל הפרמטרים הנתונים לפקודה {- ${#argv מציין את מספר הפרמטרים הנתונים לפקודה. - ${argv[n]} מציין את הפרמטר מספר n. קובץ בשם print שתפקידו להדפיס את הקבצים שהוא מקבל כפרמטרים #! /usr/local/bin/tcsh -f foreach F ($*) lpr $F end דוגמת הרצה: > print a.c b.c prog.c

אין ב-cshell אפשרות לקרוא שורות קלט מקובץ!!! קריאת שורות מקבצים הפקודה $<)) קוראת שורה מה - standard input לתור רשימה. > set str2 = ($<) This line is typed by the user > echo $str2 > echo $str2[1] This > echo $str2[2] line כאן נוצרה רשימה str2 אשר התוכן שלה הוא שורת הקלט מהstandard input - אין ב-cshell אפשרות לקרוא שורות קלט מקובץ!!! רק מה- standard input

קריאת שורות מקבצים כאשר רוצים לקרוא קובץ, כותבים את ה-script שמטפל בשורות הקובץ כאילו הוא מקבל קלט מה-standard input לאחר מכן יוצרים קובץ script חדש - "מעטפת", שתפקידו להפעיל את ה-script המקורי, תוך שהוא מפנה אליו את הקובץ שאותו רוצים לקרוא כלומר: באמצעות pipelining אנחנו גורמים לקובץ שאנחנו רוצים לקרוא להופיע בתור ה-standard input של הסקריפט

דוגמא נתון קובץ football המכיל נתונים על שערים שהובקעו במשחקי כדורגל. כל שורה בקובץ מציינת שם של שחקן, מספר השערים שהבקיע במשחק שנערך בתאריך מסוים, שם הקבוצה בה הוא שיחק ושם הקבוצה היריבה. >cat football Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer Sheva Ronen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-Aviv Reuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-Aviv Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Haifa Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem Izak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-Hiafa Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva Ronen Har.3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

דוגמא ברצוננו לכתוב script בשם player, אשר יקבל כפרמטר שם מלא של שחקן וידפיס את כל השורות של הקובץ football בהן מופיע שם השחקן, ובנוסף ידפיס את סה"כ מספר השערים שהוא הבקיע. לדוגמא, הפלט עבור שורת הקלט Alon Miz. יהיה: > player “Alon Miz.” Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva total number of goals: 6

פתרון ב - script בשם player לא נוכל לבצע קריאה שורה-שורה של הקובץ football ולכן נשתמש בו בתור מעטפת בלבד, ואת העבודה האמתית נבצע ב-script אחר בשם calc_total אשר יבצע את מבוקשנו על קלט מה-standard input. כעת, script המעטפת player יכול להשתמש ב-calc_total, על ידי הפנייה של הקובץ football ל-standard input שלו. נציג את שני התסריטים לביצוע המשימה:

פתרון > cat player #!/usr/local/bin/tcsh -f grep "$1" football | calc-total > cat calc-total #!/usr/local/bin/tcsh -f set line = ($<) set sum = 0 while (${#line} != 0) @ sum = $sum + $line[3] echo $line end echo "total number of goals: $sum"

דוגמא מסכמת לפנינו script בשם scores המדרג את השחקנים אשר שמותיהם המלאים מועברים כפרמטר, לפי הנתונים המוכלים בקובץ football. הדירוג של כל שחקן ייקבע על פי מספר השערים שהוא הבקיע, כאשר שני שחקנים שהבקיעו מספר זהה של שערים יקבלו דירוג זהה. התוכנית מדפיסה עבור כל שחקן את דירוגו, את שמו המלא ואת מספר השערים שהבקיע. >cat football Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer Sheva Ronen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-Aviv Reuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-Aviv Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Haifa Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem Izak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-Hiafa Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva Ronen Har.3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa

דוגמא מסכמת דוגמא להפעלת הסקריפט: > scores "Alon Miz." "Izak Zoh." "Ronen Ha." "Reuven A." 1 Alon Miz. 6 1 Ronen Ha. 6 2 Izak Zoh. 4 3 Reuven A. 2

פתרון > cat scores #!/usr/local/bin/tcsh -f יחזיר את שם השחקן וסה"כ while ( $i <= ${#argv} ) grep "${argv[$i]}" football | calc_score >>! temp @ i++ end sort -n +2 -r temp | calc_place if (-f temp) then rm -f temp endif יחזיר את שם השחקן וסה"כ מס' הגולים שהבקיע ימספר את השחקנים בהתאם לדירוגם

פתרון > cat calc_score #!/usr/local/bin/tcsh -f set line = ($<) set sum = 0 set player_name = ($line[1-2]) while (${#line} != 0) @ sum = $sum + $line[3] end echo "$player_name $sum" > cat calc_place #!/usr/local/bin/tcsh -f set line = ($<) set place = 1 @ goals = $line[3] while (${#line} != 0) if ($goals != $line[3]) then @ place++ endif echo "$place $line" end

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

יצירת תהליכים ב - Unix ישנן שתי צורות להריץ תוכניות: הרצה בחזית foreground מתבצעת ע"י כתיבת הפקודה: <command> פקודה המורצת בחזית גורמת ל-prompt להיעלם עד לסיום הפקודה ולכן לא נוכל להקליד פקודה נוספת כל עוד הפקודה הנוכחית לא הסתיימה בחזית יכולה להתבצע פקודה אחת לכל היותר הרצה ברקע background מתבצעת ע"י כתיבת הפקודה בתוספת &: <command> & >gcc Calc.c -o Calc הפקודה מורצת בחזית. >gcc Calc.c -o Calc & > הפקודה מורצת ברקע. על מנת לבצע מספר תוכניות בו זמנית יש להריצן ברקע. לאחר תחילת ביצוע פקודה ברקע מופיע הפרומפט וניתן לתת למערכת פקודות נוספות שתתבצענה במקביל לפקודה שהורצה ברקע

ניהול תהליכים בעזרת הפקודה jobs ניתן לבדוק אילו תהליכים קיימים ב-shell סימן ה-"+" מייצג את התהליך ה"נוכחי" – התהליך שהוא ברירת המחדל לפקודות שנציג בהמשך סימון ה-"-" מייצג את ה"יורש" – התהליך שיקבל את סימן ה-"+" אחרי שהתהליך הנוכחי יסיים את ריצתו < more forever.c main() { printf("I am going to run forever !!!\n"); while (1) ; } > forever & [1] 587 > I am going to run forever !!! > jobs [1] + Running forever > kill -9 %1 > [1] Killed forever >jobs [1] + Running cc prog.c [2] - Running troff -me big_doc.roff פקודות נוספות המאפשרות הצגה של התהליכים שקיימים כרגע הן: ps ו-top. ניתן למצוא את המידע בקבצי ה-man שלהן

פקודות לניהול תהליכים בכל הפקודות שנלמד בהמשך לניהול תהליכים יש מספר דרכים לציין תהליך מסוים: %n - תהליך מספר n. %s - התהליך אשר שורת פקודתו מתחילה במחרוזת s. %?s - job אשר שורת פקודתו מכילה את המחרוזת s. %% - התהליך הנוכחי (התהליך שסומן ב"+"). %- - התהליך הבא (התהליך שסומן ב"-"). לדוגמא כל המחרוזות הבאות מתייחסות לאותו תהליך מהדוגמא הקודמת: %1 %forever %for %?ever

העברת תהליכים לחזית fg [jobIDs] > more try_input.c main() { char str[20]; printf("I shall try to eat something"); scanf("%s" , str); printf("%s" , str); } > try_input& [1] 828 > I shall try to eat something [1] + Suspended (tty input) try_input > jobs > fg %1 try_input goodies >

העברת תהליך לרקע bg [jobIDs] מעבירה את התהליך הנוכחי או [jobIDs] לרקע > jobs [1] + Suspended forever > bg %1 [1] forever & [1] Running forever >

השעיית תהליך Ctrl-z - משעה את התהליך המתבצע כרגע בחזית. תהליך מושעה ניתן להעביר לחזית או לרקע ע"י שימוש בפקודות fg או bg. הפקודהstop jobIDs משעה את jobIDs > nroff -ms report Ctrl-z [1] + Suspended nroff <bg % > emacs & [1] 982 > forever& [2] 991 > jobs [1] + Running emacs [2] - Running forever > stop %2 > [2] + Suspended (signal) forever [1] - Running emacs

הריגת תהליך Ctrl-c - הורג את התהליך המתבצע כרגע בחזית הפקודהkill -9 jobID הורגת את התהליך jobID. למרות שמה האכזרי, פקודת kill משמשת באופן כללי לשליחת הודעות. בפועל שתי ההודעות הנפוצות ביותר שאנו שולחים לתהליכים הן "תמות" (SIGTERM) ו"תמות תכף ומייד!" (SIGKILL). הפרמטר לפקודת kill, בנוסף למזהה התהליך, הוא "-n", כאשר n הוא מספר מזהה של הודעה. אם לא מוסיפים מספר, ברירת המחדל היא שליחת ההודעה שמזוהה עם המספר 15 – "תמות". ההודעה שמזוהה עם המספר 9 היא "תמות תכף ומייד!". ההבדל בן שתי ההודעות היא ש"תמות" מאפשרת לתהליך להרוג את עצמו בצורה מסודרת (כמו ביצוע סגירה של המחשב על ידי לחיצה על הכפתור shut down במערכת ההפעלה) ואפילו להתעלם מההוראה, ואילו "תמות תכף ומייד!" הורגת את התהליך תכף ומייד (כמו ביצוע סגירה של המחשב על ידי ניתוק מהחשמל) < forever& [1] 660 > I am going to run forever !!! > kill -9 %fo > jobs >