इस खंड में हम देखेंगे कि सी/सी++ में एक ही प्रोग्राम में जॉम्बी प्रक्रिया और अनाथ प्रक्रिया को कैसे निष्पादित किया जाए। मुख्य चर्चा में जाने से पहले, आइए देखें कि ज़ोम्बी प्रक्रिया और अनाथ प्रक्रिया क्या हैं।
ज़ोंबी प्रक्रियाएं
एक ज़ोंबी प्रक्रिया एक ऐसी प्रक्रिया है जिसका निष्पादन पूरा हो गया है लेकिन इसकी प्रक्रिया तालिका में अभी भी एक प्रविष्टि है। ज़ोंबी प्रक्रियाएं आमतौर पर बाल प्रक्रियाओं के लिए होती हैं, क्योंकि मूल प्रक्रिया को अभी भी अपने बच्चे की निकास स्थिति को पढ़ने की आवश्यकता होती है। एक बार यह प्रतीक्षा प्रणाली कॉल का उपयोग करके किया जाता है, ज़ोंबी प्रक्रिया प्रक्रिया तालिका से समाप्त हो जाती है। इसे जॉम्बी प्रोसेस रीपिंग के रूप में जाना जाता है।
अनाथ प्रक्रियाएं
अनाथ प्रक्रियाएं वे प्रक्रियाएं हैं जो अभी भी चल रही हैं, भले ही उनकी मूल प्रक्रिया समाप्त या समाप्त हो गई हो। एक प्रक्रिया जानबूझकर या अनजाने में अनाथ हो सकती है।
एक जानबूझकर अनाथ प्रक्रिया बिना किसी मैन्युअल समर्थन के पृष्ठभूमि में चलती है। यह आमतौर पर अनिश्चित काल तक चलने वाली सेवा शुरू करने या उपयोगकर्ता के ध्यान के बिना लंबे समय से चल रहे कार्य को पूरा करने के लिए किया जाता है।
एक अनजाने में अनाथ प्रक्रिया तब बनाई जाती है जब इसकी मूल प्रक्रिया क्रैश या समाप्त हो जाती है। प्रक्रिया समूह तंत्र का उपयोग करके अनजाने में अनाथ प्रक्रियाओं से बचा जा सकता है।
अब निम्नलिखित कोड में हम ज़ोंबी और अनाथ प्रक्रिया को एक साथ निष्पादित करेंगे। यहां हमारे पास माता-पिता की प्रक्रिया है, इसमें एक बच्चा है, और इस बच्चे का एक और बच्चा है। यदि हमारा नियंत्रण बाल प्रक्रिया में सम्मिलित होता है, तो हम निष्पादन को 5 सेकंड के लिए रोक देंगे ताकि यह मूल प्रक्रिया को समाप्त कर सके। इस प्रकार बाल प्रक्रिया अनाथ प्रक्रिया बन जाती है। उसके बाद पोते की प्रक्रिया को ज़ोंबी प्रक्रिया में बदल दिया जाएगा। पोता निष्पादन समाप्त करता है जब उसके माता-पिता (मुख्य प्रक्रिया का बच्चा) 1 सेकंड के लिए सोता है। इसलिए पोते की प्रक्रिया समाप्त नहीं होती है, और इसकी प्रविष्टि प्रक्रिया तालिका में होगी।
उदाहरण कोड
#include <stdio.h> #include <unistd.h> int main() { int x = fork(); //create child process if (x > 0) //if x is non zero, then it is parent process printf("Inside Parent---- PID is : %d\n", getpid()); else if (x == 0) { //for chile process x will be 0 sleep(5); //wait for some times x = fork(); if (x > 0) { printf("Inside Child---- PID :%d and PID of parent : %d\n", getpid(), getppid()); while(1) sleep(1); printf("Inside Child---- PID of parent : %d\n", getppid()); }else if (x == 0) printf("Inside grandchild process---- PID of parent : %d\n", getppid()); } return 0; }
आउटपुट
soumyadeep@soumyadeep-VirtualBox:~$ ./a.out Inside Parent---- PID is : 3821 soumyadeep@soumyadeep-VirtualBox:~$ Inside Child---- PID :3822 and PID of parent : 686 Inside grandchild process---- PID of parent : 3822 soumyadeep@soumyadeep-VirtualBox:~$