यदि मैं fork
एक बाल प्रक्रिया करता हूं, और माता-पिता waitpid
पर कॉल करने से पहले बच्चे की प्रक्रिया निकलती है, तो waitpid
द्वारा निर्धारित निकास स्थिति जानकारी अभी भी वैध है? यदि हां, तो यह कब मान्य नहीं होता है; यानी, मैं कैसे सुनिश्चित करूं कि मैं बच्चे के पिड पर waitpid
पर कॉल कर सकता हूं और मनमाने ढंग से समय के बाद वैध निकास स्थिति जानकारी प्राप्त करना जारी रखता हूं, और मैं "साफ" कैसे करूं (ओएस को बताएं कि अब मुझे इसमें दिलचस्पी नहीं है समाप्त बाल प्रक्रिया के लिए बाहर निकलें स्थिति की जानकारी)?क्या वेटपिड उपज किसी बच्चे की प्रक्रिया के लिए वैध स्थिति की जानकारी देता है जो पहले से ही बाहर निकल चुका है?
मैं निम्नलिखित कोड के साथ खेल रहा था, और ऐसा प्रतीत होता है कि बाहर निकलने की स्थिति की जानकारी बच्चे खत्म होने के कम से कम कुछ सेकंड के लिए मान्य है, लेकिन मुझे नहीं पता कि ओएस को कितनी देर या कैसे सूचित किया जाए I waitpid
फिर से कॉल नहीं किया जाएगा: के बाद बच्चे को बाहर निकल गया है
#include <assert.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid = fork();
if (pid < 0) {
fprintf(stderr, "Failed to fork\n");
return EXIT_FAILURE;
}
else if (pid == 0) { // code for child process
_exit(17);
}
else { // code for parent
sleep(3);
int status;
waitpid(pid, &status, 0);
waitpid(pid, &status, 0); // call `waitpid` again just to see if the first call had an effect
assert(WIFEXITED(status));
assert(WEXITSTATUS(status) == 17);
}
return EXIT_SUCCESS;
}
वास्तव में, दूसरा 'प्रतीक्षापिप' कॉल विफल हो गया। मैंने इसके बारे में नहीं सोचा था! इस बारे में बताने के लिए शुक्रिया। –