पर्ल फ़ोर्क फ़ंक्शन

Parla Forka Fanksana



फोर्क() पर्ल का एक अंतर्निहित फ़ंक्शन है जिसका उपयोग किसी भी चल रही प्रक्रिया की चाइल्ड प्रक्रिया बनाने के लिए किया जाता है और यह केवल लिनक्स ऑपरेटिंग सिस्टम पर काम करता है। यह निष्पादन प्रक्रिया की एक अलग प्रतिलिपि बनाता है और दोनों प्रक्रियाओं को समानांतर में चलाता है। इसलिए, यदि मूल प्रक्रिया के वेरिएबल को अद्यतन किया जाता है, तो इसका चाइल्ड प्रक्रिया के समान वेरिएबल पर कोई प्रभाव नहीं पड़ेगा या इसके विपरीत। पर्ल में फोर्क() फ़ंक्शन का उपयोग इस ट्यूटोरियल में दिखाया गया है।

वाक्य - विन्यास:

फोर्क() फ़ंक्शन का सिंटैक्स निम्नलिखित में दिया गया है। यह एक संख्यात्मक मान या 'अनडेफ़' लौटाता है। यदि फोर्क() फ़ंक्शन सफलतापूर्वक काम करता है, तो एक विशेष प्रक्रिया आईडी वापस कर दी जाती है या चाइल्ड प्रक्रिया के लिए 0 लौटा दिया जाता है। यदि फोर्क() फ़ंक्शन असफल होता है तो यह 'अनडेफ़' लौटाता है।







पहचान या अपरिभाषित कांटा ( ) ;

उदाहरण 1: फोर्क() फ़ंक्शन का सरल उपयोग

निम्नलिखित स्क्रिप्ट के साथ एक पर्ल फ़ाइल बनाएं जो फोर्क() फ़ंक्शन का उपयोग करके वर्तमान प्रक्रिया से एक चाइल्ड प्रक्रिया बनाती है। फोर्क() फ़ंक्शन निष्पादित करने के बाद प्रक्रिया आईडी मुद्रित होती है। पैरेंट और चाइल्ड प्रक्रियाओं के चर अलग-अलग मेमोरी स्थानों में संग्रहीत होते हैं। इसलिए, यदि मूल प्रक्रिया में वेरिएबल का मान बदल दिया जाता है, तो यह चाइल्ड प्रक्रिया के समान वेरिएबल के लिए कोई बदलाव नहीं करेगा या इसके विपरीत। इस स्क्रिप्ट में, मूल प्रक्रिया का वेरिएबल बदल दिया जाता है। फिर, पैरेंट और चाइल्ड दोनों प्रक्रियाओं के वेरिएबल मुद्रित किए जाते हैं।



#!/usr/bin/perl

सख्त उपयोग करें ;
उपयोग चेतावनियाँ ;
5.34.0 का उपयोग करें ;

#एक वेरिएबल घोषित करें
मेरा $var = 'परीक्षण कांटा' ;
#वर्तमान प्रक्रिया को फोर्क करें
मेरी $process_id = काँटा ( ) ;

#प्रक्रिया आईडी जांचें
अगर ( $process_id < 0 )
{
कहना 'प्रक्रिया को फोर्क करने में असमर्थ।' ;
}
elsif ( $process_id == 0 )
{
कहना 'बाल प्रक्रिया:' ;
#चाइल्ड प्रक्रिया के वेरिएबल का मान प्रिंट करें
कहना 'वेरिएबल का मान: $var' ;
}
अन्य
{
कहना 'मूल प्रक्रिया: $process_id' ;
#वेरिएबल का मान अपडेट करें
$var = 'टेस्ट फ़ोर्क 2' ;
#मूल प्रक्रिया के वेरिएबल का मान प्रिंट करें
कहना 'वेरिएबल का मान: $var' ;
}

आउटपुट:



स्क्रिप्ट निष्पादित करने के बाद निम्न आउटपुट दिखाई देता है। मूल प्रक्रिया के वेरिएबल को 'टेस्ट फ़ोर्क 2' मान के साथ संशोधित किया गया है लेकिन चाइल्ड प्रक्रिया का वेरिएबल अपरिवर्तित रहता है। तो, चाइल्ड प्रोसेस के वेरिएबल का मान 'टेस्ट फ़ोर्क' है। कांटे के बाद यह मूल्य था:





  पी1

उदाहरण 2: फोर्क() और वेट() फ़ंक्शंस का उपयोग करना

निम्नलिखित स्क्रिप्ट के साथ एक पर्ल फ़ाइल बनाएं जो प्रतीक्षा() फ़ंक्शन के साथ फोर्क() फ़ंक्शन का उपयोग दिखाती है। स्क्रिप्ट की शुरुआत में तीन वेरिएबल घोषित किए गए हैं। स्लीप() फ़ंक्शन का उपयोग मूल प्रक्रिया के ब्लॉक के अंदर 1 सेकंड के लिए और चाइल्ड प्रक्रिया के अंदर 2 सेकंड के लिए किया जाता है। दो चरों के योग की गणना की जाती है और मूल प्रक्रिया के ब्लॉक के अंदर दूसरे चर पर संग्रहीत किया जाता है। दो वेरिएबल्स के मानों को गुणा किया जाता है और चाइल्ड प्रोसेस के अंदर दूसरे वेरिएबल पर संग्रहीत किया जाता है। प्रतीक्षा() फ़ंक्शन का उपयोग स्क्रिप्ट के अंत में किसी अन्य प्रक्रिया के कार्य को शुरू करने से पहले एक प्रक्रिया के कार्य को पूरा करने की प्रतीक्षा करने के लिए किया जाता है। यदि स्क्रिप्ट में फोर्क() फ़ंक्शन का उपयोग कई बार किया जाता है और एक ही समय में कई प्रक्रियाएं चल रही हैं, तो गतिरोध की स्थिति उत्पन्न हो सकती है। प्रतीक्षा() फ़ंक्शन का उपयोग करके समस्या को हल किया जा सकता है।



#!/usr/bin/perl

सख्त उपयोग करें ;
उपयोग चेतावनियाँ ;
5.34.0 का उपयोग करें ;

#वेरिएबल को प्रारंभ करें
मेरा $n1 = 10 ;
मेरा $n2 = 25 ;
मेरा $परिणाम = 0 ;

#वर्तमान प्रक्रिया को फोर्क करें
मेरी $process_id = काँटा ( ) ;

#प्रक्रिया आईडी जांचें
अगर ( $process_id == 0 )
{
#संख्याओं के गुणन की गणना करें
कहना 'बाल प्रक्रिया: $$' ;
$परिणाम = $n1 * $n2 ;
कहना '2 सेकंड रुको... \एन ' ;
नींद 2 ;
कहना '$n1 और $n2 का गुणनफल $परिणाम है।' ;
}
elsif ( $process_id > 0 )
{
#संख्याओं का योग ज्ञात करें
कहना 'मूल प्रक्रिया: $$' ;
$परिणाम = $n1 + $n2 ;
कहना 'एक सेकंड रुको... \एन ' ;
नींद 1 ;
कहना '$n1 और $n2 का योग $परिणाम है।' ;
}
अन्य
{
कहना 'प्रक्रिया को फोर्क करने में असमर्थ।' ;
}

#प्रक्रिया कार्य पूरा होने तक प्रतीक्षा करें
इंतज़ार ( ) ;

आउटपुट:

स्क्रिप्ट निष्पादित करने के बाद निम्न आउटपुट दिखाई देता है। आउटपुट के अनुसार, चाइल्ड प्रक्रिया सफलतापूर्वक बनाई गई है, मूल प्रक्रिया की प्रक्रिया आईडी मुद्रित की गई है, और कार्य को पूरा करने के लिए स्क्रिप्ट को 1 सेकंड के लिए रोक दिया गया है। इसके बाद, चाइल्ड प्रक्रिया की प्रक्रिया आईडी मुद्रित की जाती है और कार्य को पूरा करने के लिए स्क्रिप्ट को 2 सेकंड के लिए रोक दिया जाता है। पैरेंट और चाइल्ड दोनों प्रक्रियाओं का आउटपुट बाद में मुद्रित होता है:

  पी2

निष्कर्ष

पर्ल फोर्क() फ़ंक्शन का उपयोग करने का उद्देश्य इस ट्यूटोरियल में एक चाइल्ड प्रोसेस बनाकर और पैरेंट और चाइल्ड प्रोसेस के ब्लॉक के अंदर विभिन्न प्रकार के कार्य करके दिखाया गया है।