एक एम्बेडेड प्लेटफार्म (बिना स्वैप विभाजन के) पर, मेरे पास एक ऐसा एप्लिकेशन है जिसका मुख्य प्रक्रिया उपलब्ध भौतिक स्मृति में से अधिकांश पर कब्जा कर लेता है। समस्या यह है कि मैं अपने आवेदन से बाहरी शेल स्क्रिप्ट लॉन्च करना चाहता हूं, लेकिन कांटा() का उपयोग करने के लिए बच्चे की प्रक्रिया से पहले 2x मेरी मूल प्रक्रिया के लिए पर्याप्त मेमोरी होनी चाहिए (जो आखिरकार खुद को कुछ छोटे से अलग कर देगा) बनाया जा सकता है ।बहुत सारी मेमोरी का उपयोग कर एक प्रक्रिया में, मैं स्मृति-भुखमरी कांटा() के बिना एक खोल कैसे उत्पन्न कर सकता हूं?
तो क्या एक सी प्रोग्राम से एक शेल स्क्रिप्ट का आह्वान करने का कोई तरीका है बिना फोर्क() के मेमोरी ओवरहेड किए बिना?
मैंने कामकाज पर विचार किया है जैसे कि द्वितीयक छोटी प्रक्रिया है जो गोले बनाने के लिए ज़िम्मेदार है, या एक "वॉचर" स्क्रिप्ट है जिसे मैं किसी फ़ाइल या किसी चीज़ को छूकर सिग्नल करता हूं, लेकिन मुझे कुछ आसान होना चाहिए।
देखें ग्रेग Hewgill का जवाब।यह मंच पर कुछ हद तक निर्भर है - क्या आप कृपया इस बात का विस्तार कर सकते हैं कि आप किस प्लेटफॉर्म का उपयोग कर रहे हैं (उदा। क्या इसमें एमएमयू है?) – ConcernedOfTunbridgeWells
क्या यह एक प्रश्न का डुप्ली नहीं है * कल * ?? http://stackoverflow.com/questions/2731531/faster-forking-of-large-processes-on-linux –
हां और नहीं, @ पावेल, यह लिनक्स-विशिष्ट नहीं है और इसमें अतिरिक्त जानकारी है जो निष्पादित किया जा रहा है - एक खोल स्क्रिप्ट। अन्य प्रश्नकर्ता के पास थ्रेड का उपयोग करने के लिए अपने आवेदन को फिर से लिखने का विकल्प हो सकता है (यदि निष्पादित प्रोग्राम बैश/केश/अन्य-खोल के बजाए उनके नियंत्रण में निष्पादन योग्य था) लेकिन शायद इस मामले में नहीं। – paxdiablo