আমরা জানি 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