পার্ল ফর্ক ফাংশন

Parla Pharka Phansana



ফর্ক() হল পার্লের একটি অন্তর্নির্মিত ফাংশন যা যেকোনো চলমান প্রক্রিয়ার একটি চাইল্ড প্রক্রিয়া তৈরি করতে ব্যবহৃত হয় এবং এটি শুধুমাত্র লিনাক্স অপারেটিং সিস্টেমে কাজ করে। এটি কার্যকরী প্রক্রিয়ার একটি পৃথক অনুলিপি তৈরি করে এবং উভয় প্রক্রিয়া সমান্তরালভাবে চালায়। সুতরাং, যদি অভিভাবক প্রক্রিয়ার পরিবর্তনশীলটি আপডেট করা হয়, তবে এটি শিশু প্রক্রিয়ার একই পরিবর্তনশীলের উপর বা তার বিপরীতে কোন প্রভাব ফেলবে না। পার্লে ফর্ক() ফাংশনের ব্যবহার এই টিউটোরিয়ালে দেখানো হয়েছে।

বাক্য গঠন:

ফর্ক() ফাংশনের সিনট্যাক্স নিচে দেওয়া আছে। এটি একটি সংখ্যাসূচক মান বা 'undef' প্রদান করে। যদি ফর্ক() ফাংশন সফলভাবে কাজ করে, একটি নির্দিষ্ট প্রক্রিয়া আইডি ফেরত দেওয়া হয় বা চাইল্ড প্রক্রিয়ার জন্য 0 ফেরত দেওয়া হয়। ফর্ক() ফাংশন ব্যর্থ হলে এটি 'undef' প্রদান করে।







আইডি বা undef কাঁটা ( ) ;

উদাহরণ 1: ফর্ক() ফাংশনের সহজ ব্যবহার

নিম্নলিখিত স্ক্রিপ্ট সহ একটি পার্ল ফাইল তৈরি করুন যা fork() ফাংশন ব্যবহার করে বর্তমান প্রক্রিয়া থেকে একটি চাইল্ড প্রক্রিয়া তৈরি করে। ফর্ক() ফাংশন চালানোর পর প্রসেস আইডি প্রিন্ট করা হয়। পিতামাতা এবং সন্তানের প্রক্রিয়াগুলির পরিবর্তনশীলগুলি বিভিন্ন মেমরি অবস্থানে সংরক্ষণ করা হয়। সুতরাং, যদি প্যারেন্ট প্রক্রিয়ায় ভেরিয়েবলের মান পরিবর্তন করা হয়, তবে এটি চাইল্ড প্রক্রিয়ার একই ভেরিয়েবলের জন্য বা তার বিপরীতে কোনো পরিবর্তন করবে না। এই স্ক্রিপ্টে, প্যারেন্ট প্রক্রিয়ার পরিবর্তনশীল পরিবর্তন করা হয়। তারপর, অভিভাবক এবং শিশু উভয় প্রক্রিয়ার ভেরিয়েবল মুদ্রিত হয়।



#!/usr/bin/perl

কঠোর ব্যবহার করুন ;
ব্যবহার সতর্কতা ;
5.34.0 ব্যবহার করুন ;

# একটি পরিবর্তনশীল ঘোষণা করুন
আমার $var = 'টেস্ট ফর্ক' ;
#বর্তমান প্রক্রিয়াটি ফোর্ক করুন
আমার $process_id = কাঁটা ( ) ;

# প্রসেস আইডি চেক করুন
যদি ( $process_id < 0 )
{
বল 'প্রক্রিয়াটি ফর্ক করতে অক্ষম।' ;
}
elsif ( $process_id == 0 )
{
বল 'শিশু প্রক্রিয়া:' ;
# চাইল্ড প্রসেসের ভেরিয়েবলের মান প্রিন্ট করুন
বল 'ভেরিয়েবলের মান: $var' ;
}
অন্য
{
বল 'অভিভাবক প্রক্রিয়া: $process_id' ;
# ভেরিয়েবলের মান আপডেট করুন
$var = 'টেস্ট ফর্ক 2' ;
# প্যারেন্ট প্রসেসের ভেরিয়েবলের মান প্রিন্ট করুন
বল 'ভেরিয়েবলের মান: $var' ;
}

আউটপুট:



স্ক্রিপ্ট চালানোর পরে নিম্নলিখিত আউটপুট উপস্থিত হয়। অভিভাবক প্রক্রিয়ার পরিবর্তনশীল 'টেস্ট ফর্ক 2' মান দিয়ে পরিবর্তন করা হয়েছে কিন্তু চাইল্ড প্রক্রিয়ার পরিবর্তনশীল অপরিবর্তিত রয়েছে। সুতরাং, চাইল্ড প্রসেসের ভেরিয়েবলের মান হল 'টেস্ট ফর্ক'। কাঁটা পরে মান ছিল:





  p1

উদাহরণ 2: Fork() এবং Wait() ফাংশন ব্যবহার করা

নিচের স্ক্রিপ্টটি দিয়ে একটি পার্ল ফাইল তৈরি করুন যা wait() ফাংশনের সাথে fork() ফাংশনের ব্যবহার দেখায়। স্ক্রিপ্টের শুরুতে তিনটি ভেরিয়েবল ঘোষণা করা হয়। স্লিপ() ফাংশনটি প্যারেন্ট প্রসেসের ব্লকের ভিতরে 1 সেকেন্ড এবং চাইল্ড প্রসেসের ভিতরে 2 সেকেন্ডের জন্য ব্যবহার করা হয়। দুটি ভেরিয়েবলের যোগফল গণনা করা হয় এবং প্যারেন্ট প্রক্রিয়ার ব্লকের ভিতরে অন্য একটি ভেরিয়েবলে সংরক্ষণ করা হয়। দুটি ভেরিয়েবলের মান গুণিত হয় এবং চাইল্ড প্রক্রিয়ার ভিতরে অন্য একটি ভেরিয়েবলে সংরক্ষণ করা হয়। অপেক্ষা () ফাংশনটি স্ক্রিপ্টের শেষে অন্য প্রক্রিয়ার কাজ শুরু করার আগে একটি প্রক্রিয়ার টাস্ক সম্পূর্ণ করার জন্য অপেক্ষা করতে ব্যবহৃত হয়। যদি ফোর্ক() ফাংশনটি স্ক্রিপ্টে একাধিকবার ব্যবহার করা হয় এবং একই সময়ে অনেকগুলি প্রক্রিয়া চলমান থাকে, তাহলে একটি অচলাবস্থা দেখা দিতে পারে। অপেক্ষা () ফাংশন ব্যবহার করে সমস্যাটি সমাধান করা যেতে পারে।



#!/usr/bin/perl

কঠোর ব্যবহার করুন ;
ব্যবহার সতর্কতা ;
5.34.0 ব্যবহার করুন ;

# ভেরিয়েবল শুরু করুন
আমার $n1 = 10 ;
আমার $n2 = 25 ;
আমার $ফলাফল = 0 ;

#বর্তমান প্রক্রিয়াটি ফোর্ক করুন
আমার $process_id = কাঁটা ( ) ;

# প্রসেস আইডি চেক করুন
যদি ( $process_id == 0 )
{
#সংখ্যার গুন নির্ণয় কর
বল 'শিশু প্রক্রিয়া: $$' ;
$ফলাফল = $n1 * $n2 ;
বল '2 সেকেন্ড অপেক্ষা করুন... \n ' ;
ঘুম 2 ;
বল '$n1 এবং $n2 এর গুন হল $ফলাফল।' ;
}
elsif ( $process_id > 0 )
{
#সংখ্যার যোগফল নির্ণয় কর
বল 'অভিভাবক প্রক্রিয়া: $$' ;
$ফলাফল = $n1 + $n2 ;
বল '1 সেকেন্ডের জন্য অপেক্ষা করুন ... \n ' ;
ঘুম 1 ;
বল '$n1 এবং $n2 এর সমষ্টি হল $ফলাফল।' ;
}
অন্য
{
বল 'প্রক্রিয়াটি ফর্ক করতে অক্ষম।' ;
}

# প্রসেস টাস্ক সম্পূর্ণ করার জন্য অপেক্ষা করুন
অপেক্ষা করুন ( ) ;

আউটপুট:

স্ক্রিপ্ট চালানোর পরে নিম্নলিখিত আউটপুট উপস্থিত হয়। আউটপুট অনুসারে, শিশু প্রক্রিয়াটি সফলভাবে তৈরি করা হয়েছে, পিতামাতার প্রক্রিয়াটির প্রক্রিয়া আইডি প্রিন্ট করা হয়েছে এবং কাজটি সম্পূর্ণ করার জন্য স্ক্রিপ্টটি 1 সেকেন্ডের জন্য বিরতি দেওয়া হয়েছে। এরপরে, চাইল্ড প্রসেসের প্রসেস আইডি প্রিন্ট করা হয় এবং কাজটি সম্পূর্ণ করার জন্য স্ক্রিপ্টটি 2 সেকেন্ডের জন্য বিরতি দেওয়া হয়। পিতামাতা এবং শিশু উভয় প্রক্রিয়ার আউটপুট পরে মুদ্রিত হয়:

  p2

উপসংহার

পার্ল ফর্ক() ফাংশন ব্যবহার করার উদ্দেশ্য এই টিউটোরিয়ালে দেখানো হয়েছে একটি চাইল্ড প্রসেস তৈরি করে এবং প্যারেন্ট এবং চাইল্ড প্রসেসের ব্লকের ভিতরে বিভিন্ন ধরনের কাজ সম্পাদন করে।