अभी मैं एक सी प्रोग्राम लिख रहा हूं जिसे बाल प्रक्रिया को निष्पादित करना होगा। मैं एक साथ कई बच्चे प्रक्रियाओं को नहीं कर रहा हूं, इसलिए यह काफी सरल है। मैं निश्चित रूप से अंतर्निहित शैल प्रोग्राम (यानी बिल्ली और गूंज जैसी चीजें) को सफलतापूर्वक निष्पादित कर रहा हूं, लेकिन मुझे यह बताने में भी सक्षम होना चाहिए कि इनमें से कोई प्रोग्राम सफलतापूर्वक निष्पादित करने में विफल रहता है। मैं निम्नलिखित सरल कोड के साथ इस कोशिश कर रहा हूँ:execvp/कांटा - असफल निष्पादन कैसे प्राप्त करें?
int returnStatus; // The return status of the child process.
pid_t pid = fork();
if (pid == -1) // error with forking.
{
// Not really important for this question.
}
else if (pid == 0) // We're in the child process.
{
execvp(programName, programNameAndCommandsArray); // vars declared above fork().
// If this code executes the execution has failed.
exit(127); // This exit code was taken from a exec tutorial -- why 127?
}
else // We're in the parent process.
{
wait(&returnStatus); // Wait for the child process to exit.
if (returnStatus == -1) // The child process execution failed.
{
// Log an error of execution.
}
}
इसलिए उदाहरण के लिए, अगर मैं rm fileThatDoesntExist.txt निष्पादित करने के लिए प्रयास करते हैं, मैं विचार करने के लिए है कि फाइल के बाद से एक विफलता मौजूद नहीं था चाहते हैं। मैं यह कैसे हासिल कर सकता हूं? साथ ही, जबकि execvp() कॉल सफलतापूर्वक अंतर्निहित शैल प्रोग्राम निष्पादित करता है, यह निष्पादन योग्य की वर्तमान निर्देशिका में प्रोग्राम निष्पादित नहीं करता है (यानी वह प्रोग्राम जो इस कोड के अंदर चल रहा है); क्या वर्तमान निर्देशिका में प्रोग्राम चलाने के लिए मुझे कुछ और करना है?
धन्यवाद!
संभावित डुप्लिकेट [फोर्क()) के बाद execvp (...) त्रुटियों को कैसे संभालें? (Https: // stackoverflow।कॉम/प्रश्न/1584956/कैसे-टू-हैंडल-execvp-error-after-fork) – Ruslan