פתרון פרויקט סביבת הרצת משימות¶
הפתרון בונה תחילה את טופולוגיית pipes ומחזיק כל fd בבעלות RAII. לאחר spawn כל צד סוגר את הקצוות שאינו צריך. קצה כתיבה שנשאר פתוח בטעות אצל ההורה יכול למנוע EOF גם אחרי שכל child סיים, ולכן מפת descriptors היא חלק מהבדיקה.
הדיווח על exec failure משתמש בערוץ שהchild סוגר אוטומטית בעת exec מוצלח לפי CLOEXEC. אם exec נכשל, הוא כותב קוד שגיאה לפי הפרוטוקול המצומצם ומסיים דרך מסלול שמתאים לcontext שאחרי fork. אין קריאה שרירותית לספריית runtime מורכבת במצב שבו locks ירשו מצב לא בטוח.
העברת הפלט היא nonblocking ומוגבלת בזיכרון. הילד שאינו קורא קלט מפעיל backpressure בלי לחסום את ניקוז הפלט של child אחר. כשלקוח אינו צורך פלט, המדיניות היא דחייה, עצירה או truncation מתועד; אין צמיחה בלתי מוגבלת.
הtimeout מסיים את ההמתנה של הלקוח לפי שלביו, שולח בקשת סיום לקבוצה וממשיך לקצור. אם נדרש סיום כפוי, הוא מתועד בנפרד. זהות תהליך שמורה באמצעות handle מתאים כאשר זמין או דרך בעלות על child ופרוטוקול קצירה, ולא באמצעות שימוש חוזר מאוחר בPID בלבד.
הכשל בspawn אמצעי מפעיל rollback על ילדים שכבר התחילו ועל כל קצות הpipe. בדיקת descendent ששומר פלט פתוח מוכיחה שהמפקח אינו ממתין לנצח לEOF אחרי שסיים את הילד הישיר. הדוח מציין איזה עץ תהליכים הוא באמת מסוגל לנהל ומה נמצא מחוץ לגבול שלו.