פונקציית פרל פורק

Pwnqzyyt Prl Pwrq



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

תחביר:

התחביר של הפונקציה fork() ניתן בהמשך. זה מחזיר ערך מספרי או 'undef'. אם הפונקציה fork() פועלת בהצלחה, מזהה תהליך מסוים מוחזר או 0 מוחזר עבור תהליך הילד. הוא מחזיר 'undef' אם הפונקציה fork() לא מוצלחת.







תְעוּדַת זֶהוּת אוֹ מזלג undef ( ) ;

דוגמה 1: שימוש פשוט בפונקציה Fork()

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



#!/usr/bin/perl

להשתמש קפדני ;
להשתמש אזהרות ;
השתמש ב-5.34.0 ;

#הכרז על משתנה
$var שלי = 'מזלג מבחן' ;
# מזלג את התהליך הנוכחי
ה-$process_id שלי = מזלג ( ) ;

#בדוק את מזהה התהליך
אם ( $process_id < 0 )
{
אמר 'לא מצליח לסלף את התהליך.' ;
}
אלסיף ( $process_id == 0 )
{
אמר 'תהליך הילד:' ;
#הדפס את הערך של המשתנה של תהליך הילד
אמר 'ערך המשתנה: $var' ;
}
אַחֵר
{
אמר 'תהליך אב: $process_id' ;
#עדכן את הערך של המשתנה
$var = 'מזלג מבחן 2' ;
#הדפס את הערך של המשתנה של תהליך האב
אמר 'ערך המשתנה: $var' ;
}

תְפוּקָה:



הפלט הבא מופיע לאחר ביצוע הסקריפט. המשתנה של תהליך האב משתנה עם הערך 'Test Fork 2' אך המשתנה של תהליך הילד נשאר ללא שינוי. אז, הערך של המשתנה של תהליך הילד הוא 'מזלג מבחן'. זה היה הערך אחרי המזלג:





  p1

דוגמה 2: שימוש בפונקציות Fork() ו-Wit()

צור קובץ Perl עם הסקריפט הבא המציג את השימוש בפונקציה fork() עם הפונקציה wait() . שלושה משתנים מוצהרים בתחילת הסקריפט. הפונקציה sleep() משמשת בתוך הבלוק של תהליך האב למשך שנייה אחת ובתוך תהליך הילד למשך 2 שניות. הסכום של שני המשתנים מחושב ומאוחסן על משתנה אחר בתוך הבלוק של תהליך האב. הערכים של שני המשתנים מוכפלים ומאוחסנים על משתנה אחר בתוך תהליך הילד. הפונקציה wait() משמשת בסוף הסקריפט כדי לחכות להשלמת המשימה של תהליך אחד לפני תחילת המשימה של תהליך אחר. אם הפונקציה fork() משמשת מספר פעמים בסקריפט ותהליכים רבים פועלים בו-זמנית, עלול להיווצר מצב מבוי סתום. ניתן לפתור את הבעיה באמצעות הפונקציה wait() .



#!/usr/bin/perl

להשתמש קפדני ;
להשתמש אזהרות ;
השתמש ב-5.34.0 ;

#אתחל את המשתנים
$n1 שלי = 10 ;
$n2 שלי = 25 ;
התוצאה $ שלי = 0 ;

# מזלג את התהליך הנוכחי
ה-$process_id שלי = מזלג ( ) ;

#בדוק את מזהה התהליך
אם ( $process_id == 0 )
{
#חשב את הכפל של המספרים
אמר 'תהליך ילד: $$' ;
תוצאה $ = $n1 * $n2 ;
אמר 'חכה 2 שניות... \n ' ;
לִישׁוֹן 2 ;
אמר 'הכפל של $n1 ו-$n2 הוא $result.' ;
}
אלסיף ( $process_id > 0 )
{
#חשב את סכום המספרים
אמר 'תהליך הורה: $$' ;
תוצאה $ = $n1 + $n2 ;
אמר 'חכה שנייה אחת... \n ' ;
לִישׁוֹן 1 ;
אמר 'הסכום של $n1 ו-$n2 הוא $result.' ;
}
אַחֵר
{
אמר 'לא מצליח לסלף את התהליך.' ;
}

#המתן להשלמת משימת התהליך
לַחֲכוֹת ( ) ;

תְפוּקָה:

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

  p2

סיכום

מטרת השימוש בפונקציה Perl fork() מוצגת במדריך זה על ידי יצירת תהליך צאצא וביצוע סוגים שונים של משימות בתוך הבלוק של תהליכי האב והצאצא.