למד את הפקודה לינוקס - לחכות

שֵׁם

המתן, המתן - המתן לסיום התהליך

תַקצִיר

#include
#include

pid_t לחכות ( מצב int * );
pid_t waitpid (pid_t pid , int * מצב , אפשרויות int );

תיאור

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

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

הערך של pid יכול להיות אחד מאלה:

<-1

כלומר, להמתין לכל תהליך ילדות אשר מזהה קבוצת התהליך שלו שווה לערך המוחלט של pid .

.1

כלומר להמתין לכל ילד תהליך; זוהי אותה התנהגות שמחכה תערוכות.

0

כלומר, להמתין לכל תהליך ילדות שמזהה קבוצת התהליך שלו זהה לזה של תהליך הקריאה.

> 0

כלומר להמתין לילד שזיהוי התהליך שלו שווה לערך של pid .

ערך האופציות הוא OR של אפס או יותר מהקבועים הבאים:

וינוהאנג

כלומר לחזור מיד אם אף ילד לא יצא.

מיובש

שפירושו גם להחזיר לילדים אשר נעצרים, ומעמדם לא פורסם.

(לאפשרויות של Linux בלבד, ראה בהמשך).

אם הסטטוס אינו NULL , המתן או לחכות מידע מצב החנות במיקום הצביע על ידי מצב .

מצב זה ניתן להעריך עם פקודות המאקרו הבאות (פקודות מאקרו אלה לוקחות את מאגר הנתונים ( int ) כארגומנט --- לא מצביע למאגר!):

WIFEXITED ( סטטוס )

הוא לא אפס אם הילד יצא באופן נורמלי.

WEXITSTATUS ( סטטוס )

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

WIFSIGNALED ( סטטוס )

מחזירה אמת אם תהליך הילד יצא בגלל אות שלא נתפס.

WTERMSIG ( מצב )

מחזירה את מספר האות שגרם לסיום תהליך הילד. מאקרו זה ניתן להערכה רק אם WIFSIGNALED חזר לא אפס.

WIFSTOPPED ( סטטוס )

מחזירה אמת אם תהליך הילד שגרם החזרה מופסק כעת; זה אפשרי רק אם השיחה נעשתה באמצעות WUNTRACED .

WSTOPSIG ( סטטוס )

מחזירה את מספר האות שגרם לילד להפסיק. מאקרו זה ניתן להערכה רק אם WIFSTOPPED חזר לא אפס.

גרסאות מסוימות של יוניקס (לדוגמה, Linux, Solaris, אך לא AIX, SunOS) מגדירים גם מאקרו WCOREDUMP ( מצב ) כדי לבדוק אם תהליך הלידה של הילד מושלך. השתמש רק במארז #ifdef WCOREDUMP ... #endif.

ערך החזרה

מזהה התהליך של הילד אשר יצא, או אפס אם WNOHANG היה בשימוש ולא היה ילד זמין, או -1 על שגיאה (במקרה זה errno מוגדר לערך המתאים).

שגיאות

ECHILD

אם צוין התהליך pid אינו קיים או אינו ילד בתהליך הקריאה. (זה יכול לקרות לילד של ילדכם אם הפעולה עבור SIGCHLD מוגדרת ל- SIG_IGN. ראו גם את הקטע LINUX הערות לגבי הנושאים.)

EINVAL

אם ארגומנט האופציות אינו חוקי.

EINTR

אם WNOHANG לא הוגדר ואותות ללא חסימה או SIGCHLD נתפסו.