কম্পিউটার টিউটোরিয়াল

C++-এ fork() এবং wait() ব্যবহার করে প্রসেস বটম-আপ এক্সিকিউট করা


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

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

প্রসেসগুলো বটম-আপ ক্রমে এক্সিকিউট করতে wait() ফাংশন ব্যবহার করা হবে।

উদাহরণ কোড

#include <iostream> 
#include <sys/wait.h> 
#include <unistd.h> 
using namespace std; 
int main() { 
    pid_t id1 = fork(); // দুইটি ক্রমাগত fork দিয়ে ৪টি প্রসেস তৈরি: মূল প্রসেস, দুটি চাইল্ড এবং একটি গ্র্যান্ডচাইল্ড 
    pid_t id2 = fork(); 
    if (id1 > 0 && id2 > 0) { // দুটি আইডিই নন-জিরো হলে প্যারেন্ট প্রসেস 
        wait(NULL); 
        wait(NULL); 
        cout << "Ending of parent process" << endl; 
    } else if (id1 == 0 && id2 > 0) { // প্রথম আইডি 0 হলে প্রথম চাইল্ড 
        sleep(2); // ২ সেকেন্ড অপেক্ষা করে দ্বিতীয় চাইল্ডকে আগে এক্সিকিউট করার সুযোগ দেওয়া 
        wait(NULL); 
        cout << "Ending of First Child" << endl; 
    } else if (id1 > 0 && id2 == 0) { // দ্বিতীয় আইডি 0 হলে দ্বিতীয় চাইল্ড 
        sleep(1); // ১ সেকেন্ড অপেক্ষা 
        cout << "Ending of Second child process" << endl; 
    } else { 
        cout << "Ending of grand child" << endl; 
    } 
    return 0; 
}

আউটপুট

Ending of grand child
Ending of Second child process
Ending of First Child
Ending of parent process

  1. OpenCV-এ C++ ব্যবহার করে কম্পিউটার থেকে ভিডিও লোড করা

  2. OpenCV-এ C++ ব্যবহার করে অন্যান্য ক্যামেরা থেকে ভিডিও ক্যাপচার করা

  3. OpenCV-এ C++ ব্যবহার করে ডিফল্ট ক্যামেরা থেকে ভিডিও ক্যাপচার করা

  4. C++-এ একটি সিস্টেম হ্যান্ডল করতে পারী জম্বি প্রসেসের সর্বোচ্চ সংখ্যা