לדלג לתוכן

פתרון ירושת מתארים

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

עבור פתיחת קובץ נשתמש ב־O_CLOEXEC כחלק מהפתיחה. עבור צינור נבדוק pipe2, ועבור שכפול נבדוק ממשק כגון F_DUPFD_CLOEXEC בהתאם לדרישות. הדגל נשאר תכונה של המתאר החדש ולא של כל ההפניות לאותה פתיחה.

הפעולה format! עשויה להקצות, והפעולה println! עשויה לנעול מצב של פלט. לאחר fork בתהליך רב־תהליכוני הנעילה יכולה להישאר במצב שנשלט בידי תהליכון שאינו קיים בבן. הפתרון הוא להכין את הנתונים מראש ולהשתמש בחלון הבן רק בפעולות שהחוזה מתיר, או להעביר את ההכנה לתוכנית החדשה אחרי exec.