हम जानते हैं कि 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 का उपयोग करके 4 प्रोसेस बनाएं। मेन प्रोसेस, दो चाइल्ड और एक ग्रैंडचाइल्ड 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); //दूसरे चाइल्ड को पहले निष्पादित करने के लिए 2 सेकंड प्रतीक्षा करें wait(NULL); cout << "Ending of First Child" << endl; }else if (id1 > 0 && id2 == 0) { //जब दूसरी आईडी 0 हो, तो यह दूसरा चाइल्ड है sleep(1); //1 सेकंड प्रतीक्षा करें cout << "Ending of Second child process" << endl; }else { cout << "Ending of grand child" << endl; } return 0; }आउटपुट
soumyadeep@soumyadeep-VirtualBox:~$ ./a.out Ending of grand child Ending of Second child process Ending of First Child Ending of parent process soumyadeep@soumyadeep-VirtualBox:~$