2012-06-13 3 views
6

के बाद बच्चे की प्रक्रिया से बाहर निकलने के बाद os.fork() के बाद बाल प्रक्रिया से बाहर निकलने के लिए कॉल करने का सही कार्य कौन सा है?os.fork()

प्रलेखन os._exit()states के लिए:

मानक तरीका बाहर निकलने के लिए sys.exit(n) है।

_exit() सामान्यतः केवल fork() के बाद बाल प्रक्रिया में उपयोग किया जाना चाहिए।

यह नहीं कहता कि sys.exit() का उपयोग करके बाल प्रक्रिया को समाप्त करना स्वीकार्य है या नहीं। तो:

  1. क्या यह है?
  2. क्या ऐसा करने के संभावित दुष्प्रभाव हैं? os._exit(n) पर प्रलेखन आप तलब नहीं किया की

उत्तर

8

The unix way यह है कि यदि आप fork के बच्चे हैं तो आप _exit पर कॉल करें। जबकि _exit यूज़रस्पेस में सामान की न्यूनतम राशि है, बस इसके सभी फाइलों आदि

यह बंद करने के लिए कर्नेल रही,, atexit संचालकों कॉल flushes stdio आदि - exit और _exit के बीच मुख्य अंतर यह है कि exit अधिक अप tidies है sys.exit के साथ exit के साथ पाइथन दुनिया में सीधे सीधे अनुवाद करता है जो os._exit न्यूनतम संभव करता है।

आप fork का एक बच्चा है और आप exit बजाय _exit फोन तो आपको बुला बाहर निकलने के संचालकों जब यह अपरिभाषित व्यवहार के कारण बाहर निकल जाता है कि माता-पिता फिर से फोन होगा खत्म हो सकता है।

1

भाग

बाहर निकलें स्थिति n के साथ प्रक्रिया, आदि

तो, कैसे है सफाई संचालकों बुला, stdio बफ़र्स निस्तब्धता के बिना मैं इसे पढ़ रहा हूं, आपको os._exit() का उपयोग तब तक करना चाहिए जब तक कि आप फ़ाइल हैंडलर साझा नहीं करते हैं (इसलिए वे एक और प्रक्रिया से नज़दीक() 'डी होंगे) और आप बफर को स्वयं को फ्लश करने का ख्याल रखते हैं (यदि यह आपके मामले में मायने रखता है)। के बिना साझा संसाधन (जैसे "फाइलें") - इससे कोई फर्क नहीं पड़ता।

तो यदि आपके बच्चे की प्रक्रिया केवल गणना है, और कच्चे डेटा (संसाधन हैंडलर नहीं) खिलाया जाता है, तो exit() का उपयोग करना सुरक्षित है।