linux - How to control execution of parent process after execl() call in C program? -
मेरे पास साधारण सी प्रोग्राम है जो फोर्क () और execl () का उपयोग कर एक अनुप्रयोग को निष्पादित करता है। अगर execl () अनुप्रयोग को चलाने में विफल रहता है, तो मुझे मूल प्रक्रिया में फ़ंक्शन कॉल करना होगा और बाल प्रक्रिया से बाहर निकलना होगा यदि execl () सफलतापूर्वक अनुप्रयोग चलाता है, तो मैं अभिभावक प्रक्रिया से एक सफलता लॉग दिखाया है। इसलिए, माता-पिता की प्रक्रिया को बच्चे के एक्सकेड () कॉल के लिए इंतजार करना चाहिए (केवल कॉल, आवेदन के निष्पादन के अंत तक नहीं), इसके बारे में कुछ जानकारी प्राप्त करें, और फिर निर्णय लें और अपना स्वयं का निष्पादन जारी रखें। यहां मेरा कोड है।
int main () {int iExecRetVal, pid; Pid = fork (); If (pid == -1) {} else if (pid & gt; 0) {} और {iExecRetVal = execl ("। / Flute-static", "./flute-static", "-send", "-a192 .168.190.1 / 6666 "," जेएफलिट .1.2.tar.gz ", नल); यदि (iExecRetVal == -1) {/ * execl () विफल हुआ, तो मूल प्रक्रिया * /} _exit (0) में कुछ त्रुटि हैंडलिंग की आवश्यकता है; } / * अभिभावक के सामान्य निष्पादन * /} Int HandleSuccessFromParent () {/ * जब call exec सफल हुआ था} /} int HandleFailureFromParent () {/ * को कॉल किया जाना चाहिए जब exec कॉल सफल नहीं था /}
हम जानते हैं कि execl () सफलता पर वापस नहीं लौटाता है इसलिए, बच्चे में execl () कॉल के ठीक बाद HandleSuccessFromParent () और HandleFailureFromParent () फ़ंक्शन को कैसे कॉल करें कृपया मेरी मदद करें।
बाल प्रक्रिया को त्रुटि स्थिति (गैर-शून्य; 1 से बाहर निकलने की आवश्यकता है सामान्य, EXIT_FAILURE
मानक सी है।)।
माता-पिता की प्रक्रिया को बच्चे को समाप्त करने के लिए इंतजार करना पड़ता है, और बच्चे का बाहर निकलने की स्थिति को कैप्चर करना या प्रयोग करना।
यदि आप जानना चाहते हैं कि बच्चा मर गया है लेकिन इसे पूरा करने के लिए इंतजार नहीं करना है, तो बच्चे को जाने के लिए एक छोटे से विराम के बाद waitpid ()
से WNOHANG
का उपयोग करें कोशिश और भागो (एक उप-सेकंड विलंब लंबे समय तक होने की संभावना है)।
Comments
Post a Comment