זה ידוע מַזלֵג() קריאת מערכת משמשת ליצירת תהליך חדש שהופך לילד של תהליך המתקשר.
ביציאה הילד משאיר סטטוס יציאה שיש להחזיר להורה. אז כשהילד מסיים זה הופך להיות א מְטוּמטָם .
בכל פעם שהילד יוצא או עוצר נשלח להורה א SIGCHLD אוֹת.
ההורה יכול להשתמש בקריאת המערכת wait() או waitpid() יחד עם פקודות המאקרו WIFEXITED ו-WEXITSTATUS איתו כדי ללמוד על המצב של הילד שנעצר.
(*)wait() קריאת מערכת: היא משעה את ביצוע תהליך ההתקשרות עד שאחד מהילדים שלו יסתיים.
תחביר של קריאת מערכת wait():
pid_t wait(int *status);
(*) קריאת המערכת waitpid() : היא משעה את הביצוע של תהליך הקריאה עד שילד שצוין על ידי ארגומנט pid ישנה מצב.
תחביר של קריאת מערכת waitpid() :
pid_t waitpid(pid_t pid int *status int options)
הערה: כברירת מחדל waitpid() ממתין רק לילדים שהסתיימו אך התנהגות זו ניתנת לשינוי באמצעות ארגומנט האפשרויות כגון WIFEXITED WEXITSTATUS וכו'.
הערך של pid יכול להיות:
- פחות מ-1 : המשמעות היא המתנה לכל תהליך צאצא שמזהה קבוצת התהליך שלו שווה לערך המוחלט של pid.
- שווה ל-1 : פירושו לחכות לכל תהליך ילד.
- שווה ל-0: פירוש הדבר המתנה לכל תהליך צאצא שמזהה קבוצת התהליך שלו שווה לזה של תהליך ההתקשרות.
- גדול מ-0 : משמע המתנה לילד שמזהה התהליך שלו שווה לערך ה-pid.
WIFEXITED ו-WEXITSTATUS הן שתיים מהאפשרויות שניתן להשתמש בהן כדי לדעת את מצב היציאה של הילד.
WIFEXITED(סטטוס) : מחזירה true אם הילד הסתיים כרגיל.
WEXITSTATUS(סטטוס) : מחזיר את סטטוס היציאה של הילד. יש להשתמש במאקרו זה רק אם WIFEXITED החזיר כ-true.
להלן יישום C שבו הילד משתמש execl() פונקציה אבל הנתיב שצוין ל-execl() אינו מוגדר.
הבה נראה מהו ערך סטטוס היציאה של הילד שההורה מקבל.
// C code to find the exit status of child process #include #include #include #include #include // Driver code int main(void) { pid_t pid = fork(); if ( pid == 0 ) { /* The pathname of the file passed to execl() is not defined */ execl('/bin/sh' 'bin/sh' '-c' './nopath' NULL); } int status; waitpid(pid &status 0); if ( WIFEXITED(status) ) { int exit_status = WEXITSTATUS(status); printf('Exit status of the child was %dn' exit_status); } return 0; }
תְפוּקָה:

הערה: ייתכן שהקוד שלמעלה לא יעבוד עם מהדר מקוון שכן fork() מושבת.
כאן סטטוס היציאה הוא 127 מה שמציין שיש בעיה כלשהי בנתיב או שיש שגיאת הקלדה.
כמה קודי מצב יציאה מפורטים להלן למידע נוסף:
- 1: שגיאות שונות כגון 'חלק באפס' ופעולות בלתי מותרות אחרות.
-
2: חסרה מילת מפתח או בעיה בפקודה או הרשאה. - 126: בעיית הרשאה או פקודה אינם קובץ הפעלה
- 128: ארגומנט לא חוקי ליציאה.
הערה: תקן C אינו מגדיר את המשמעות של קודי החזרה. כללי השימוש בקודי החזרה משתנים בפלטפורמות שונות.