दो-चरण का कारण लचीलापन है। दो चरणों के बीच आप बाल प्रक्रिया के संदर्भ को संशोधित कर सकते हैं कि नए निष्पादित कार्यक्रम का उत्तराधिकारी होगा।
कुछ बातें आप बदलना चाहते हैं कर सकते हैं:
- फ़ाइल वर्णनकर्ता
- उपयोगकर्ता/समूह आईडी
- प्रक्रिया समूह और सत्र आईडी
- वर्तमान निर्देशिका
- संसाधन सीमा
- निर्धारण प्राथमिकता और संबंध
- फ़ाइल निर्माण मुखौटा (Umask)
आप कांटा और कार्यकारी विभाजित नहीं किया है और बजाय एक ही अंडे की तरह सिस्टम कॉल किया था, यह इन प्रक्रिया के प्रत्येक के लिए तर्क ले करने की आवश्यकता होगी जिम्मेदार बताते हैं यदि आप उन्हें एक बच्चे में अलग ढंग से सेट करना चाहता था प्रक्रिया। उदाहरण के लिए, विंडोज एपीआई में CreateProcess के लिए तर्क सूची देखें।
कांटा/निष्पादन के साथ, आप नए कार्यक्रम को निष्पादित करने से पहले जो भी विरासत प्रक्रिया गुणों को आप बच्चे में रखना चाहते हैं उसे बदलते हैं।
फ़ाइल डिस्क्रिप्टर सेट अप करना बच्चे के प्रक्रिया संदर्भ में बदलने के लिए एक आम बातों में से एक है। यदि आप किसी प्रोग्राम के आउटपुट को कैप्चर करना चाहते हैं, तो आप आम तौर पर पाइप (2) सिस्टम कॉल के साथ माता-पिता में पाइप बनायेंगे, और फोर्क (2) आईएनजी के बाद, आप मूल प्रक्रिया में लिखने के अंत को बंद कर देंगे और बंद कर देंगे निष्पादित करने से पहले बच्चे की प्रक्रिया में अंत पढ़ें (2)। (आप फाइल डिस्क्रिप्टर 1 (stdout) होने के लिए पाइप के बच्चे के अंत को सेट करने के लिए डुप्लिकेट (2) का भी उपयोग करेंगे)। यह एक सिस्टम कॉल में असंभव या प्रतिबंधित होगा।
वास्तव में, आप कांटा() के साथ कुछ भी गलत नहीं कर सकते हैं, क्योंकि इसमें कोई तर्क नहीं है। क्या यह कोई आसान हो सकता है? – 0x6adb015
उम्म, निष्पादन पूरे मिमी को प्रतिस्थापित करता है, केवल "टेक्स्ट" नहीं ... देखें /usr/src/linux/fs/exec.c और /usr/src/linux/fs/binfmt_elf.c – ephemient
आमतौर पर, कांटा नहीं होगा डेटा क्षेत्र को क्लोन करें, लेकिन इसे कॉपी-ऑन-लिखित (गाय) के रूप में चिह्नित करें। यदि माता-पिता या बच्चे ने डेटा बदलने की कोशिश की है, तो पृष्ठ को क्लोन कर दिया जाएगा और माता-पिता और बच्चे अलग-अलग पृष्ठों के साथ समाप्त हो जाएंगे। – camh