c - बच्चे की सभी प्रक्रियाओं को पूरा करने के लिए माता-पिता की प्रतीक्षा कैसे करें?




process operating-system (2)

POSIX एक फ़ंक्शन को परिभाषित करता है: wait(NULL); । यह waitpid(-1, NULL, 0); के लिए आशुलिपि है waitpid(-1, NULL, 0); , जो किसी भी एक बच्चे की प्रक्रिया से बाहर निकलने तक कॉलिंग प्रक्रिया के निष्पादन को निलंबित कर देगा। यहाँ, waitpid का पहला तर्क किसी भी बच्चे की प्रक्रिया के समाप्त होने की प्रतीक्षा को इंगित करता है।

आपके मामले में, माता-पिता ने इसे आपकी else शाखा के भीतर से कॉल किया है।

मैं उम्मीद कर रहा हूँ कि किसी को कुछ प्रकाश डाला जा सकता है कि कैसे कांटा के बाद जारी रखने से पहले माता-पिता को सभी बच्चे प्रक्रियाओं की प्रतीक्षा करें। मेरे पास सफाई कोड है जिसे मैं चलाना चाहता हूं लेकिन ऐसा होने से पहले बच्चे की प्रक्रियाओं को वापस करने की आवश्यकता है।

for (int id=0; id<n; id++) {
  if (fork()==0) {
    // Child
    exit(0);      
  } else {
    // Parent
    ...
  }
  ...
}

इस तरह से वेटपिड () का उपयोग करें:

pid_t childPid;  // the child process that the execution will soon run inside of. 
childPid = fork();

if(childPid == 0)  // fork succeeded 
{   
   // Do something   
   exit(0); 
}

else if(childPid < 0)  // fork failed 
{    
   // log the error
}

else  // Main (parent) process after fork succeeds 
{    
    int returnStatus;    
    waitpid(childPid, &returnStatus, 0);  // Parent process waits here for child to terminate.

    if (returnStatus == 0)  // Verify child process terminated without error.  
    {
       printf("The child process terminated normally.");    
    }

    if (returnStatus == 1)      
    {
       printf("The child process terminated with an error!.");    
    }
}






posix