Chapter 08: Launchd & Background Processes - Hands-On Lab¶
תרחיש התרגול (Lab Scenario)¶
במעבדה זו נחקור לעומק את מנגנון ה-launchd של macOS ואת תהליכי הרקע, תוך שימוש בכלים גרפיים מובנים של המערכת. נשתמש ב-Activity Monitor כדי לנתח צריכת משאבים וניהול זיכרון, נבחן קבצי תצורה מסוג Plist בעזרת Finder ו-TextEdit, וניצור סוכן רקע (LaunchAgent) משלנו. לבסוף, נשתמש ב-System Settings כדי לנהל אותו, ובאפליקציית ה-Console לאיתור תהליכי ה-MDM שרצים ברקע.
דרישות קדם (Prerequisites)¶
- מחשב עם macOS 26 (Tahoe).
- Local Account עם הרשאות מנהל (Local Admin).
- היכרות בסיסית עם עורך הטקסט TextEdit ואפליקציית Activity Monitor.
- (אופציונלי אך מומלץ לחלק 4) חיבור שריר למערכת MDM או סוכן EDR מותקן.
חלק 1: ניתוח עמוק עם Activity Monitor¶
מטרה: זיהוי משאבים, תהליכים והבנת ההיררכיה במערכת ההפעלה דרך עיניו של משתמש IT.
- פתח את Activity Monitor (ניתן למצוא תחת תיקיית
Applications/Utilities/או דרך חיפוש ב-Spotlight). - עבור ללשונית CPU ובחר בתפריט העליון בשורת התפריטים:
View > All Processes, Hierarchically. - תצוגה זו תסדר את התהליכים בתצורת עץ, כך שתוכל לראות איזה תהליך אב הוליד איזה תהליך בן.
- אתר את התהליך השורשי. גלול למעלה או חפש ושים לב שתהליך
kernel_taskמקבל תמיד PID 0. - מתחתיו, חפש את התהליך
launchdאשר תמיד מקבל PID 1. הוא אחראי על טעינת רוב שאר התהליכים במערכת. - לחץ פעמיים על תהליך
launchdלחקירת הלשוניות: - Memory: בדוק כמה זיכרון תהליך האב צורך באופן שוטף.
- Open Files and Ports: גלול ברשימה וראה את כמות הקבצים והספריות שהתהליך ניגש אליהם (כולל ספריות עמוקות בתוך המערכת).
- סגור את חלון המידע של
launchdועבור ללשונית הכללית של Memory באפליקציה. - בחן את תרשים ה-Memory Pressure בתחתית המסך:
- ירוק: יש מספיק זיכרון פיזי (RAM) זמין לכלל התהליכים.
- צהוב: מנגנון ניהול הזיכרון מתחיל לדחוס נתונים (Memory Compression) או להשתמש ב-Swap כדי לפנות מקום.
- אדום: המערכת משתמשת באופן אינטנסיבי בדיסק כזיכרון וירטואלי (Swap), מה שמוביל להאטה מורגשת בביצועים.
- תרגול Force Quit:
- פתח את אפליקציית המחשבון (
Calculator). - אתר אותה ברשימה ב-Activity Monitor.
- בחר את התהליך ולחץ על לחצן ה-X (Stop) בסרגל הכלים העליון של החלון.
- בחר באופציה Force Quit. המערכת שולחת פקודת
SIGKILLלתהליך וסוגרת אותו באופן מיידי ומאולץ.
חלק 2: יצירת LaunchAgent וניהולו דרך System Settings¶
מטרה: הבנת המבנה של קובץ XML מסוג Plist והפעלת Background Process ברמת המשתמש (LaunchAgent) ללא צורך בהרשאות Root, וכיבוי מבוקר דרך הממשק הגרפי.
- פתח את אפליקציית TextEdit.
- ודא שאתה במצב Plain Text (בתפריט העליון:
Format > Make Plain Text, אם זה לא מופיע, אתה כבר במצב המתאים). - העתק והדבק פנימה את קוד ה-XML הבא:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.example.hello</string> <key>ProgramArguments</key> <array> <string>/bin/echo</string> <string>Hello from LaunchAgent!</string> </array> <key>StandardOutPath</key> <string>/tmp/hello_agent.log</string> <key>StartInterval</key> <integer>10</integer> </dict> </plist> - בתפריט העליון לחץ על
File > Save. נשמור את הקובץ ישירות לתיקיית סוכני הרקע של המשתמש: - בחלון השמירה, הקש על קיצור המקלדת
Cmd+Shift+G(כדי לפתוח את חלונית "Go to Folder"). - הקלד את הנתיב:
~/Library/LaunchAgentsולחץ על ה-Enter (אם התיקייה אינה קיימת, צור אותה תחילה דרך ה-Finder בנתיב הבית שלך). - בשדה שם הקובץ (Save As), הקלד:
com.example.hello.plist. - הורד את הסימון מ- "If no extension is provided, use .txt" ולחץ על Save.
- כדי לטעון את ה-LaunchAgent ללא שימוש בטרמינל, בצע Log Out מחשבון המשתמש שלך דרך תפריט התפוח (
> Log Out). - התחבר בחזרה למשתמש (Log In). תהליך ה-
launchdמזהה את הקובץ החדש בספרייה שלך ומפעיל אותו. - כעת נבדוק אם הסוכן רץ. פתח את Finder, לחץ על
Go > Go to Folderוהקלד/tmp. - חפש את הקובץ
hello_agent.logופתח אותו (על ידי לחיצה כפולה, הוא ייפתח ב-Console או TextEdit). אתה אמור לראות שהשורה "Hello from LaunchAgent!" מודפסת כל 10 שניות. (אם לא, המתן דקה ופתח שוב). - כיבוי מבוקר (Disable Override):
- פתח את System Settings.
- נווט אל General > Login Items & Extensions.
- תחת הקטגוריה
Allow in the Background, חפש פריט המזוהה כ-com.example.helloאו "Unknown Developer". - כבה את המתג לצידו. פעולה זו עוצרת את הסוכן ורושמת במערכת ה-BTM (Background Task Management) שיש להתעלם ממנו בהפעלות הבאות, גם אם הקובץ עצמו נשאר בתיקייה!
חלק 3: חקירת LaunchDaemons מובנים של המערכת¶
מטרה: להבחין בהבדל המהותי בין סוכן הקיים בתיקיית המשתמש לבין שירותי ליבה של macOS בספריית ה-System.
- פתח חלון Finder חדש.
-
לחץ על צירוף המקשים
Cmd+Shift+Gוהקלד את הנתיב:/System/Library/LaunchDaemons. (זוהי ספריה המוגנת הרמטית על ידי מנגנון ה-SSV של אפל, ולא ניתנת לשינוי, אך קריאה שלה מותרת). -
ברשימת הקבצים, חפש פריטים הקשורים לשירותי רשת. גלול למטה עד שתמצא את הקובץ
com.apple.mDNSResponder.plist. - בחר את הקובץ ולחץ על מקש הרווח (Spacebar) כדי לפתוח אותו בתצוגה המקדימה (Quick Look).
- עיין בתוכן ה-XML:
- חפש את המפתח
ProgramArguments. שים לב כיצד הוא מכיל את הנתיב המדויק לקובץ ההפעלה (/usr/sbin/mDNSResponder). - חפש את המפתח
KeepAliveושים לב לערכים שלו. אלו ההנחיות המגדירות ל-launchdלדאוג שהתהליך תמיד יפעל עבור שירותי גילוי הרשת (Bonjour).
חלק 4: חקירת תהליכי MDM עם אפליקציית ה-Console¶
מטרה: איתור תהליך ה-MDM ברקע, הבנת ההיררכיה שלו, ומעקב אחר פעילות הסנכרון בעזרת אפליקציית ה-Console החזותית.
- פתח שוב את Activity Monitor.
- ודא כי התצוגה היא
All Processesרגיל. - בשורת החיפוש בפינה הימנית העליונה, הקלד את המונח
mdmclient. - תהליך ה-
mdmclientהוא ה-Daemon המובנה של macOS שמקשיב לתקשורת מפלטפורמת ה-MDM. - (הערה: אם הארגון שלכם משתמש ב-Agent צד-שלישי כמו של Jamf או Kandji, תוכל לחפש גם את שמם).
- בחר את התהליך
mdmclientולחץ על לחצן ה-i (Information) בסרגל העליון (או לחץ פעמיים על השורה). - עבור ללשונית Open Files and Ports.
- גלול ברשימה וחפש נתיבים המצביעים לתיקיית
/var/db/ConfigurationProfiles. זהו המקום שבו המערכת שומרת Configuration Profiles קריטיים שה-Daemon מנהל. - כעת, נראה את הפעילות בזמן אמת: פתח את אפליקציית Console (נמצאת תחת
/Applications/Utilities/). - בצד שמאל, תחת
Devices, בחר את המחשב המקומי שלך. - בשורת החיפוש בפינה הימנית העליונה של ה-Console, הקלד
mdmclientולחץ Enter. - לחץ על כפתור ה-Start (אם הוא לא לחוץ כבר) בחלק העליון כדי להתחיל לתפוס אירועים בזמן אמת.
- תוכל לפתוח את System Settings > Privacy & Security > Profiles וללחוץ על פרופיל (אם קיים) כדי לגרום למערכת לייצר קצת לוגים, ולצפות כיצד הם מופיעים בצורה ויזואלית ב-Console בחתך של
mdmclient.
תרגיל אקסטרה / קצה קרחון טכני¶
כדי לנהל תהליכי רקע בצורה מהירה דרך שורת הפקודה, מנהלי מערכת נוהגים להשתמש בכלי ה-launchctl. הכלי מונע את הצורך בביצוע יציאה/כניסה של המשתמש. כמו כן, מפתחים משתמשים בפקודת log stream לתצוגת לוגים בזמן אמת במקום להשתמש באפליקציית ה-Console.
-
טעינה (Load) של LaunchAgent ללא ניתוק:
(פקודה זו מחליפה את הדרך הישנהlaunchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.hello.plistlaunchctl loadומנחה את המערכת להפעיל את הקובץ עבור המשתמש הנוכחי). -
מעקב אחרי ה-MDM בלייב בטרמינל:
(זהו המקביל המדויק לחיפושlog stream --predicate 'process == "mdmclient"' --infomdmclientבאפליקציית ה-Console, אך מסנן מידע שולי בצורה אפקטיבית יותר).