करता है, इसलिए मैंने fork()
का उपयोग किया है और मुझे पता है कि यह क्या करता है। शुरुआत के रूप में मैं इससे बहुत डरता था (और मैं अभी भी इसे पूरी तरह से समझ नहीं पा रहा हूं)। fork()
का सामान्य विवरण जो आप ऑनलाइन पा सकते हैं, यह है कि यह वर्तमान प्रक्रिया की प्रतिलिपि बनाता है और अलग-अलग पीआईडी, पैरेंट पीआईडी असाइन करता है और प्रक्रिया में अलग पता स्थान होगा। सभी अच्छे हैं, हालांकि, इस कार्यक्षमता विवरण को देखते हुए एक शुरुआती आश्चर्यचकित होगा "यह कार्य इतना महत्वपूर्ण क्यों है ... मैं अपनी प्रक्रिया की प्रतिलिपि क्यों लेना चाहूंगा?"। तो मैंने आश्चर्यचकित किया और अंततः मुझे पता चला कि आप execve()
परिवार के माध्यम से अपनी वर्तमान प्रक्रिया के भीतर से अन्य प्रक्रियाओं को कैसे कॉल कर सकते हैं।क्यों फोर्क()
जो मुझे अभी भी समझ में नहीं आता है, आपको ऐसा क्यों करना है? सबसे तार्किक बात एक समारोह है कि आप जो एक नई प्रक्रिया() अंडे जाएगा और मुख्य की शुरुआत में उसका चलना आरंभ और नई पीआईडी लौट
तरहcreate_process("executable_path+name",params..., more params);
कॉल कर सकते हैं करने के लिए किया जाएगा।
मुझे परेशान करता है कि यह महसूस कर रहा है कि कांटा/निष्पादन समाधान संभावित रूप से अनियंत्रित काम कर रहा है। क्या होगा यदि मेरी प्रक्रिया बहुत मेमोरी का उपयोग कर रही है? क्या कर्नेल मेरी पेज टेबल और इस तरह की प्रतिलिपि बनाता है। मुझे यकीन है कि यह वास्तव में वास्तविक स्मृति आवंटित नहीं करता है जब तक कि मैंने इसे छुआ नहीं है। इसके अलावा, अगर मेरे पास धागे हैं तो क्या होगा? यह मुझे लगता है कि यह बहुत गन्दा है।
फोर्क के बारे में लगभग सभी विवरण बताते हैं कि यह सिर्फ प्रक्रिया की प्रतिलिपि बनाता है और fork()
कॉल के बाद नई प्रक्रिया चलने लगती है। यह वास्तव में होता है लेकिन यह इस तरह क्यों होता है और क्यों नई प्रक्रियाओं को विकसित करने का एकमात्र तरीका फोर्क/निष्पादित करता है और आपके वर्तमान से एक नई प्रक्रिया बनाने का सबसे सामान्य यूनिक्स तरीका क्या है? क्या प्रक्रिया को बढ़ाने के लिए कोई और अधिक प्रभावी तरीका है? ** जो अधिक स्मृति की प्रतिलिपि बनाने की आवश्यकता नहीं होगी।
This धागा एक ही मुद्दे के बारे में बात करती है, लेकिन मैं इसे काफी संतोषजनक नहीं मिला:
धन्यवाद।
कृपया http://unix.stackexchange.com/ या http://superuser.com/ – rlemon
पर पोस्ट करें क्यों यूनिक्स? यह एक प्रोग्रामिंग प्रश्न है जो ढेर ओवरफ्लो से संबंधित है। – Petr
vfork के मैन पेज को पढ़ने के बाद http://cm.bell-labs.com/who/dmr/hist.html – ninjalj