קורא לפונקציית getpid ב- C עם דוגמאות

Calling Getpid Function C With Examples



Getpid () היא הפונקציה המשמשת לקבל את מזהה התהליך של התהליך שקורא לפונקציה הזו. ה- PID של התהליך הראשוני הוא 1, ולאחר מכן לכל תהליך חדש מוקצה מזהה חדש. זוהי גישה פשוטה להשגת ה- PID. פונקציה זו מסייעת לך רק בקבלת מזהי התהליכים הייחודיים.

פונקציות המשמשות בקבלת מזהים

ישנם שני סוגים של תעודות זהות. האחד הוא המזהה הנוכחי של תהליך ה- PID. ואילו השני הוא המזהה של תהליך האב PPID. שתי הפונקציות הללו הן פונקציות מובנות המוגדרות בספרייה. הפעלת הקוד מבלי להשתמש בספרייה זו עלולה לגרום לשגיאה ולהפסיק את פעולתה.







פונקציית getpid () ב- C

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



הפונקציה getppid () ב- C

מזהה זה שימושי להחזרת התהליך/תהליך הפונקציה האב.



דוגמא 1
כדי להבין את הדוגמה של PID בתהליך בשפת C. אתה צריך שני כלים: כל עורך טקסט ומסוף לינוקס, שבו אתה אמור להריץ את הפקודות. צור קובץ בכל עורך טקסט. יצרנו שם קובץ code1.c מכיוון שהקוד כתוב בשפת C, ולכן יש לשמור אותו עם הסיומת .c.





הוספנו ספרייה אחת. ואז כאן מתחילה התוכנית הראשית. בתוכנית הראשית, אנו קוראים לפונקציה המובנית getpid (); כדי להביא את מזהה התהליך הנוכחי. ומשתנה מוצג ומוקצה. כך שהערך של הפונקציה PID () יישמר במשתנה זה, אז ניקח את ההדפסה של הערך באמצעות משתנה זה.



כעת אנו רוצים להריץ את תוכן קובץ זה במסוף לינוקס. תנאי הקוד צריך להיערך תחילה ולאחר מכן לבצע. לצורך הידור משתמשים ב- GCC. אם המערכת שלך חסרה GCC, עליך להתקין אותה תחילה באמצעות הפקודה Sudo.

עכשיו הידור הקוד שנכתב. ניתן להשיג זאת באמצעות הפקודה המצורפת הבאה.

$ GCC –o code1 code1.c

ואילו –o משמש לפתיחת קובץ השמירה בפקודה. ואז אחרי –o, אנו כותבים את שם הקובץ.

לאחר האוסף, הפעל את הפקודה.

$ ./code1

התמונה למעלה מציגה את מזהה התהליך של הפונקציה.

דוגמא 2
בדוגמה הקודמת אנו משתמשים ב- PID. אך בדוגמה זו משתמשים ב- PID והן ב- PPID. קוד המקור של פונקציה זו כמעט זהה לקודם הקודם. רק שיש תוספת נוספת של תעודת זהות.

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

Int pid_t = getpid ();
Int ppid_t = getppid ();

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

$ GCC –o code1 code1.c
$ ./code1

הפלט מראה שמזהה התהליך מוצג תחילה ולאחר מכן מוצג מזהה התהליך האב.

דוגמה 3
כל התהליכים פועלים ומתבצעים במקביל. ההורה והתהליך הילד מבצעים את כל השורות הנותרות ביחד. שניהם נותנים תוצאות בכל פעם. אך על ידי שימוש במזלג בקוד C, אם פונקציה זו מחזירה ערך הנמוך מ- 0, המשמעות היא ששיחת הפונקציה מסתיימת.

שקול קובץ חדש בעל שתי ספריות בכותרת המתאימה. כאן נעשה שימוש במצב בו השתמשנו בהצהרת אם-אחרת. בתוכנית הראשית, נאמר שאם ערך המזלג הוא בערך –ive, הוא יציג הודעה כי מזהה התהליך נכשל ולא יתקבל. אם המצב אינו נכון, המהדר יעבור לחלק האחר של התנאי. בחלק זה מתקבלת מזהה התהליך, לאחר מכן נציג מזהה תהליך זה ונציג הודעה שמזהה התהליך מתקבל. כאן נצטט את הצהרת ה- if-else של קוד המקור.

שוב, הרכיב את הקוד ולאחר מכן הפעל אותו.

./code2

הפלט מראה כי החלק האחר בוצע וידפיס את מזהה התהליך ולאחר מכן יציג הודעת PID.

דוגמה 4

זוהי דוגמה נוספת להסברת אותו מושג. הפונקציה Fork () מחזירה שני ערכים שונים. במקרה של תהליך ילדים, הערך הוא 0, אותו יש להחזיר. יחד עם זאת, הערך במקרה של תהליך ההורה הוא מזהה התהליך של הילד החדש.

בדוגמה זו, אותו תנאי if_else משמש. אך כאן, שני תנאים מיושמים. השוואת ה- PID שהיא פחות מאפס והשנייה שווה לאפס. אם ה- PID פחות מאפס, הוא יראה הודעת שגיאה. בעוד שאם ה- PID שווה לאפס, זה אומר שזהו תהליך צאצא, וחלק אחר מראה שאם ה- PID גדול מאפס, זהו תהליך האב.

כעת הידור והפעל את הקוד.

$ gcc –o code3 code3.c
$./קוד 3

מהפלט, אנו יכולים לראות שחלק אחר מודפס תחילה פירושו שמזהה התהליך גדול מ- 0.

דוגמה 5
בסדר, זוהי הדוגמה האחרונה בה ניסינו לסכם את כל הקודים המתוארים לעיל כדי להסביר את פעולתה של פונקציה זו. אנו יכולים גם להשתמש בלולאות עם פונקציות המזלג () כדי להשתמש בפונקציות getpid (). אנו יכולים להשתמש בלולאות ליצירת תהליכי ילדים רבים. כאן עלינו להשתמש בערך 3 בלולאה.

שוב עלינו להשתמש בהצהרה המותנית בקוד. לולאת ה- for מתחילה מהאחת וחוזרת על 3מחקר ופיתוחתור.

כעת שמור את הקובץ והפעל אותו. יש עוד שיטה פשוטה לריכוז וביצוע הקוד רק בפקודה אחת. זה.

קודים של $ GCC5.c –o s & ./code5

עכשיו נע לעבר פלט הקוד. מזהה תהליך ההורה זהה בכל תהליכי הילד. המשמעות היא שכל התהליכים הללו שייכים להורה אחד. תהליכים אלה מבוצעים אחד אחרי השני מכיוון שהלולאה מוגבלת ל -3. רק 3 איטרציות יבוצעו.

סיכום

מאמר זה מכיל את הידע הבסיסי, ואת העבודה של פונקציית getPID () בפקודות Linux. המזהה הייחודי מוקצה לכל תהליך באמצעות פונקציה זו.