Chapter 8: תהליכי רקע ומערכת Launchd - סיכום שיעור (Asset C)¶
1. נושאי השיעור¶
- 1. הלב של המערכת: היכרות עם תהליך launchd וסוגי ה-LaunchAgents וה-Daemons.
- 2. Activity Monitor עמוק: ניטור עומסי זיכרון ומעבד באבחון תקלות.
- 3. קבצי Plist: אבחון פריטי התחברות וקריאת נתוני XML במערכת.
- 4. תיבול ארגוני: איתור סוכני ה-MDM וטיפול בקריסות שלהם ברקע.
מסמך זה מרכז את מילון המושגים, הפקודות והנתיבים החשובים לניהול, ניטור ופתרון תקלות בשירותי הרקע של macOS, כולל launchd, קבצי plist, ושימוש ב-Activity Monitor.
📖 מילון מושגים ורכיבי ליבה¶
- Launchd: תהליך הליבה של macOS (התהליך הראשון שעולה – PID 1). הוא "ההורה" של כל שאר התהליכים ואחראי לטעינה, ניהול, ניטור וכיבוי של שירותים, אפליקציות ותהליכי רקע במערכת.
- LaunchDaemon: (LaunchDaemon) Background Process ברמת המערכת. פועל תחת משתמש ה-
rootורץ גם אם אין משתמש מחובר למערכת. לרוב משמש כלי IT, אנטיווירוס (XProtect Remediator) וסוכני MDM. - LaunchAgent: (LaunchAgent) Background Process ברמת המשתמש. מופעל רק כאשר משתמש נכנס למערכת (Login) ורץ תחת ההרשאות של אותו משתמש.
- LaunchAngels: רכיב חדש ומוגן ב-macOS 26 (Tahoe). אלו שירותי מערכת ייעודיים של אפל (למשל לתכונות נגישות מסוימות) שרצים תחת תנאים ספציפיים. הם מוגנים בתוך ה-Sealed System Volume (SSV) ואינם זמינים לשימוש למפתחי צד-שלישי.
- Plist - Property List: קובץ תצורה במבנה XML (לעיתים קרובות מקודד בינארית). בשימוש
launchd, קובץ זה מגדיר מה להריץ, מתי להריץ (למשל בעת הפעלה מחדש או ברווחים קבועים) ואילו ארגומנטים להעביר. - Activity Monitor: הכלי המובנה ב-macOS לניטור משאבי מערכת בזמן אמת, כולל מעבד (CPU), זיכרון (Memory), צריכת חשמל (Energy), כתיבה לדיסק (Disk) ופעילות רשת (Network).
- Memory Pressure: מדד ויזואלי ב-Activity Monitor המציג עד כמה המערכת מתאמצת לנהל את הזיכרון (ירוק = תקין, צהוב = בבדיקה, אדום = המערכת נאלצת להשתמש יותר מדי בכונן הקשיח לטובת Swap).
- Swap Space: "זיכרון וירטואלי". כאשר ה-RAM (זיכרון מאוחד ב-Apple Silicon) מתמלא, המערכת כותבת דפי זיכרון לכונן ה-SSD. עודף כתיבה/קריאה ל-Swap מאט את המערכת משמעותית.
- MDM Agent: ה-Daemon של פתרון ניהול המכשירים (כמו Jamf Daemon או Intune Agent) שרץ ברקע באופן קבוע ומוודא החלת Configuration Profiles ופקודות מרחוק.
🗂️ נתיבים קריטיים במערכת (System Paths)¶
המיקום של קובץ ה-Plist קובע אם התהליך יהיה של המערכת, של המשתמש, או ייעודי לאפל בלבד:
/System/Library/LaunchDaemons/– שירותי מערכת פנימיים של Apple. מוגן (Read-Only) תחת SSV./System/Library/LaunchAgents/– שירותי משתמש פנימיים של Apple. מוגן (Read-Only) תחת SSV./System/Library/LaunchAngels/– התיקייה החדשה (מ-macOS 26) לשירותים מיוחדים מוגנים./Library/LaunchDaemons/– המקום שאליו תוכנות צד שלישי (אנטיווירוס, MDM, VPN מנוהל) משליכות את התהליכים ברמת המערכת. גישה דורשת הרשאות מנהל (Admin)./Library/LaunchAgents/– תהליכי רקע צד שלישי שיופעלו עבור כל המשתמשים שיעשו Login למחשב.~/Library/LaunchAgents/– תהליכי רקע ייעודיים רק למשתמש הספציפי.
💻 מדריך פקודות טרמינל (CLI Commands)¶
1. הפקודה launchctl (ניהול תהליכי רקע)¶
שים לב: התחביר הישן של
load/unloadכבר פחות מומלץ על ידי אפל, למרות שעוד עובד. התחביר המודרני משתמש ב-bootstrap/bootout.
צפייה בתהליכים:
- הצגת כל התהליכים שרצים כעת:
launchctl list - איתור תהליך ספציפי (למשל חיפוש שירות של חברת האבטחה או ה-MDM):
launchctl list | grep -i mdm launchctl list | grep -i jamf - קבלת מידע עמוק ומוחלט על תצורת ה-launchd כולה (טוב לשמירה לקובץ במקרה של דיאגנוסטיקה):
launchctl dumpstate
הפעלה ועצירה של שירותי מערכת (LaunchDaemons):
- טעינת/רישום Daemon למערכת (מחייב
sudo):sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.daemon.plist - הסרת/כיבוי Daemon מניהול המערכת:
sudo launchctl bootout system /Library/LaunchDaemons/com.example.daemon.plist - ביטול (Disable) טעינה עתידית של השירות:
sudo launchctl disable system/com.example.daemon - הפעלה כפויה (Start) של שירות קיים ללא קשר לתזמון שלו:
sudo launchctl start com.example.daemon
הפעלה ועצירה של שירותי משתמש (LaunchAgents):
(יש להריץ ללא sudo, ויש לציין את מזהה המשתמש - UID. ניתן למצוא את ה-UID על ידי הפקודה id -u)
- טעינת Agent למשתמש:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.agent.plist - כיבוי Agent למשתמש:
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.agent.plist
2. הפקודה plutil (עבודה וקריאה של קבצי Plist)¶
קבצי Plist מגיעים לא פעם בתצורה בינארית שלא ניתנת לקריאה בעין בטרמינל. הפקודה plutil היא הכלי לעבוד איתם.
-
בדיקת תקינות סינטקס (Syntax Validation) לפני טעינה למערכת:
(הפקודה תחזירplutil -lint /Library/LaunchDaemons/com.example.daemon.plistOKאם הקובץ תקין, או תציין באיזו שורה יש שגיאה). -
המרת קובץ בינארי לקריאה כ-XML (ההדפסה תשנה את הקובץ המקורי):
sudo plutil -convert xml1 /path/to/file.plist -
המרת הקובץ בחזרה לתצורה בינארית (חסכוני יותר במקום):
sudo plutil -convert binary1 /path/to/file.plist -
הדפסת תוכן הקובץ בפורמט JSON קריא על המסך (מבלי לשנות את הקובץ פיזית):
plutil -p /path/to/file.plist
3. איתור לחץ מעבד וזיכרון דרך הטרמינל¶
למי שלא רוצה להשתמש ב-Activity Monitor אלא בממשק השורת פקודה:
- צפייה במשאבי המערכת בזמן אמת (מעבד וזיכרון, מתעדכן כל שניה):
top -u - הדפסת מדדי "לחץ הזיכרון" (Memory Pressure) ומצב ה-Swap:
memory_pressure
קישורים מומלצים ולקריאה נוספת¶
- Welcome to Tahoe’s Launch Angels - מאמר טכני על הרכיב החדש שהוצג ב-macOS 26 לניהול שירותי מערכת.
- Explainer: % CPU in Activity Monitor - הסבר לעומק למה אחוזי מעבד במק לפעמים מטעים ואיך לקרוא אותם נכון.
- View Memory Usage in Activity Monitor - מדריך רשמי קצר שמסביר איך לעקוב אחרי "לחץ זיכרון" בכלי ה-Activity Monitor.
- Manage Login and Background items - צלילה טכנית לאופן בו פריטי רקע ו-LaunchAgents מנוהלים על ידי המערכת.
- A brief history of XML and property lists - סקירה היסטורית מרתקת על הסיבה שאפל משתמשת בקובצי Plist.