में संभालने का सबसे अच्छा तरीका मेरे पास मूल प्रक्रिया है, जिसे कुछ बच्चों की प्रक्रियाएं बनाना है। मैंने पाया सबसे अच्छा तरीका fork
+ execl
का उपयोग कर रहा है। लेकिन फिर माता-पिता को यह जानने की जरूरत है कि execl
कंक्रीट बच्चे विफल रहता है या नहीं, और मुझे नहीं पता कि इसे कैसे कार्यान्वित किया जाए।लिनक्स में बाल प्रक्रिया बनाने और संभावित विफलता
int pid = fork();
if (pid < 0) {
std::cout << "ERROR on fork." << std::endl;
} if (pid == 0) {
execl("/my/program/full/path", (char *)NULL);
exit(1);
}
else {
if (/*child's process execl fails*/) {
std::cout << "it failed" << std::endl
} else {
std::cout << "child born" << std::endl
}
}
मुझे लगता है कि इस विचार अच्छा नहीं है:
int status(0);
sleep(100);
int res = waitpid(pid, &status, WNOHANG);
if (res < 0 && errno == 10) {
std::cout << "it failed" << std::endl
} else {
std::cout << "child born" << std::endl
}
क्योंकि यह आशा है कि बच्चा प्रक्रिया 100 मिलीसेकंड के बाद मर जाएगा अच्छा नहीं है, मुझे पता है कि यह सुनिश्चित करें के लिए के रूप में ही नहीं इच्छा होता है चाहता हूँ।
मुझे यह भी लगता है कि इस तरह के चेक के लिए साझा_मेमरी या विशेष पाइप कनेक्शन का निर्माण मधुमक्खियों के खिलाफ एक तोप है।
इसके लिए सरल समाधान होना चाहिए, कि मुझे अभी तक अभी तक नहीं मिला है।
इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?
बस 'पॉपन' का उपयोग करें और वापसी मूल्य की जांच करें। – Andrew
मान लें कि यह अभी भी जिंदा है, मैं कैसे सुनिश्चित कर सकता हूं कि execl विफल नहीं हुआ? शायद यह असफल रहा, और प्रक्रिया ज़िंदा है क्योंकि यह अभी तक 'बाहर निकलने (1)' निर्देश को पूरा नहीं कर पाया है। – Arkady
क्या आप यह जांचना चाहते हैं कि आपकी प्रक्रिया सफलतापूर्वक * लॉन्च की गई *, या यह * पूर्ण * और * शून्य की स्थिति लौटा *? दोनों काफी अलग हैं। – Andrew