מזהה תהליך
ערך ללא מקורות | ||
| ערך ללא מקורות | |
במערכות הפעלה, מזהה תהליך (מאנגלית: Process Identifier, בדרך כלל מופיע בקיצור Process ID או בראשי תיבות PID) הוא מספר המשמש את ליבת מערכת ההפעלה לזהות תהליך באופן ייחודי (חד-חד-ערכי). המספר משמש גם כפרמטר המועבר לפונקציות שונות של מערכת ההפעלה הדורשות הפניה לתהליך, למשל עדכון העדיפות של התהליך, סיום מאולץ שלו (kill) ועוד[1].
נוכל לראות בהרבה מקומות את המילה PPID, הכוונה פה היא Parent Process ID כלומר המספר מזהה של התהליך הנוכחי.
במערכות הפעלה מבוססות Unix, תהליכים חדשים נוצרים באמצעות קריאת המערכת Fork, המייצרת תהליך בן חדש מתוך התהליך האב. מזהה התהליך של התהליך הבן מוחזר לתהליך האב כך שהאב יוכל לבצע פעולות על התהליך הבן בהמשך[2]. מזהי התהליך ב-Unix בדרך כלל מוקצים סדרתית, כאשר התהליך הראשון שנוצר במערכת מקבל את המזהה 0 וכל תהליך חדש מקבל את המזהה העוקב לזה האחרון שהוקצה[3]. כאשר מגיעים למזהה התהליך המקסימלי (משתנה ממערכת הפעלה אחת לשנייה), חוזרים ל-0 וממשיכים להקצות את המזהים, אך מדלגים על מזהים המוקצים לתהליכים אחרים שעודם קיימים ברשימת התהליכים (בין אם התהליך עדיין רץ ובין אם הוא תהליך זומבי).
ב-Microsoft Windows תהליכים חדשים נוצרים באמצעות הקריאה לפונקציה CreateProcess, ומזהה התהליך החדש שנוצר מוחזר לתהליך האב כשדה dwProcessId במבנה הנתונים PROCESS_INFORMATION[4]. תהליך המעוניין לקבל את המזהה שהוקצה לו יכול לעשות כן על ידי קריאה לפונקציה GetCurrentProcessId[5].
Linux PID
[עריכת קוד מקור | עריכה]בלינוקס הספירה באמת מתחילה גם כן מ-0, כאשר את PID 0 מקבל הקוד הראשוני שרץ של מערכת הפעלה. כלומר ה PPID של PID 1 וגם של PID 2 הוא PID 0.
בתהליך זה מערכת ההפעלה מייצרת שני תהליכים מאוד חשובים[6]:
- את PID 1 עבור הUser space (תהליך init[7]) תפקידו לנהל את התהליכי המשתמש בצורה טובה ובנוסף לבצע Automatic Reparenting.
- את PID 2 עבור Kernel Space תפקידו לייצר את כל תהליכי הkernel שמתבקשים[8]. ב kernel התהליכים אינם processes כיוון שכולם חולקים את אותו זיכרון ב RAM וזה נוגד את ההגדרה של process שלכל תהליך יש מרחב כתובות זיכרון אישי. ולכן קוראים להם threads.
Commands
[עריכת קוד מקור | עריכה]על מנת לראות את רשימת כל התהליכים שחיים בתוך המערכת הפעלה שלנו נצטרך לבצע את הפעולה הבאה על ידי CMD / Terminal.
Linux
[עריכת קוד מקור | עריכה]פקודה זו מחזירה לנו את הID של התהליך, את ה ID של תהליך האב של תהליך זה, את המצב שלו (מצב ריצה, מצב שינה וכו,) וכן את הפקודה/השם של התהליך.
ps -eo pid,ppid,stat,command
Windows
[עריכת קוד מקור | עריכה]Get-Process | Select-Object Id, ProcessName, Path
הערות שוליים
[עריכת קוד מקור | עריכה]- ↑ I. CHANDRA MOHAN, OPERATING SYSTEMS, PHI Learning Pvt. Ltd., 2013-02-13, עמ' 69, ISBN 978-81-203-4726-7. (באנגלית)
- ↑ fork(2) - Linux manual page, man7.org
- ↑ Robert Love, Linux System Programming: Talking Directly to the Kernel and C Library, "O'Reilly Media, Inc.", 2013-05-14, עמ' 138-139, ISBN 978-1-4493-4154-1. (באנגלית)
- ↑ karl-bridge-microsoft, CreateProcessA function (processthreadsapi.h) - Win32 apps, docs.microsoft.com (באנגלית אמריקאית)
- ↑ karl-bridge-microsoft, GetCurrentProcessId function (processthreadsapi.h) - Win32 apps, docs.microsoft.com (באנגלית אמריקאית)
- ↑ torvalds, linux/init/main.c at master · torvalds/linux, GitHub (באנגלית)
- ↑ Shlomi Boutnaru Ph.D, The Linux Process Journey — PID 1 (init), Medium, 2024-06-14 (באנגלית)
- ↑ torvalds, linux/kernel/kthread.c at master · torvalds/linux, GitHub (באנגלית)