פרויקט ממשק למנהל התהליכים¶
התוכנית שלנו כבר יודעת לנהל worker. עכשיו מישהו צריך להשתמש בה בלי לפתוח debugger ובלי לנחש אם היא נתקעה. נבנה חלון שמפעיל את הsupervisor מפרק 4, מציג את מצבו ומסיים בלי להשאיר אחריו תהליכים.
המערכת מורכבת משני קובצי הפעלה. הקובץ supervisor.exe הוא הפתרון של פרק 4, ללא שינוי. הקובץ dashboard.exe מפעיל אותו בjob נוסף. התמיכה בnested jobs נדרשת כאן, ולכן סביבת המעבדה היא Windows 10 או חדשה יותר. בהמשך נחליף את גבול התהליך בפרוטוקול שירות; כרגע אנחנו רוצים לראות בבירור מי אחראי למי.
מה צריך לעבוד¶
הממשק מציג כפתור התחלה, כפתור סיום כפוי ומצב נוכחי. הלחיצה על התחלה אינה חוסמת את לולאת ההודעות. הלחיצה על סיום כפוי מבקשת לסיים את כל הjob של ההרצה, והדיווח מציין שזה היה סיום כפוי. סגירת החלון מפסיקה לקבל עבודה חדשה וממתינה לסיום המסלול הקיים תוך המשך טיפול בהודעות.
הקובץ שמופעל נבחר מנתיב קבוע לצד הdashboard. אין חיפוש בתיקייה הנוכחית ואין קבלת שם executable מלקוח. הטקסט שמוצג כולל את שגיאת הWin32 או את exit code לפי השלב שבו נכשלנו. היעלמות הsupervisor לבדה אינה הוכחה שכל הילדים שלו הסתיימו.
מה מגישים¶
ההגשה כוללת את שני קובצי ההפעלה, סמלים תואמים, קוד מקור ופקודת build. מוסיפים את provider משיעור 10.6 ואת איסוף הdump משיעור 10.4 לתהליך הנכון, ומתעדים איזה dump לא יכול להסביר תקלה בתהליך האחר.
הבדיקות כוללות הפעלה רגילה, שתי לחיצות התחלה רצופות, סגירה בזמן עבודה, קובץ supervisor חסר וסיום כפוי. מוסיפים הרצה שבה הworker מתעלם מבקשת הסיום הרגילה באמצעות מצב המעבדה של פרק 4. לכל בדיקה רושמים מה נצפה ומה עדיין לא הוכח.
ההפצה משתמשת בתהליך משיעורים 10.9 ו10.10, עם manifest של הקבצים והפרדה בין symbols פנימיים לחבילה שהמשתמש צריך. בודקים התקנה במכונה נקייה ושדרוג שנכשל לפני השלמת ההתקנה. השחזור אינו מוחק נתוני משתמש כדי להסתיר כשל.
תנאי סיום¶
הפרויקט מסתיים כאשר אפשר להסביר כל המתנה וכל handle. הממשק נשאר מגיב בזמן הworker, אין התחלה כפולה והדיווח מבדיל בין סיום שנצפה לבין cleanup שלא הושלם בזמן. מצרפים חקירה של תקלה אחת באמצעות ראיה שלא נוצרה מהסתכלות בקוד בלבד.