यह इंटरफ़ेस को सरल बनाने के लिए है। करने के लिए वैकल्पिक forkऔर execविंडोज 'की तरह कुछ होगा CreateProcess कार्य करते हैं। ध्यान दें कि कितने पैरामीटर CreateProcessहैं, और उनमें से कई अधिक मापदंडों के साथ संरचना हैं। ऐसा इसलिए है क्योंकि नई प्रक्रिया के बारे में आप जो कुछ भी नियंत्रित करना चाहते हैं उसे पारित करना होगा CreateProcess। वास्तव में, CreateProcessपर्याप्त पैरामीटर नहीं है, इसलिए Microsoft को CreateProcessAsUser और CreateProcessWithLogonW को जोड़ना पड़ा ।
fork/execमॉडल के साथ , आपको उन सभी मापदंडों की आवश्यकता नहीं है। इसके बजाय, प्रक्रिया की कुछ विशेषताओं को संरक्षित किया जाता है exec। यह आपको अनुमति देता है fork, फिर जो भी प्रक्रिया विशेषताएँ आप चाहते हैं उन्हें बदल दें (उन्हीं कार्यों का उपयोग करें जिन्हें आप सामान्य रूप से उपयोग करेंगे), और फिर exec । लिनक्स में, forkकोई पैरामीटर नहीं है, और execveइसमें केवल 3 हैं: चलाने के लिए प्रोग्राम, इसे देने के लिए कमांड लाइन, और इसका वातावरण। (अन्य execकार्य भी हैं, लेकिन वे execveसामान्य उपयोग के मामलों को सरल बनाने के लिए सी लाइब्रेरी द्वारा उपलब्ध कराए गए रैपर हैं।)
आप एक अलग वर्तमान निर्देशिका के साथ एक प्रक्रिया शुरू करना चाहते हैं: fork, chdir, exec।
यदि आप stdin / stdout को पुनर्निर्देशित करना चाहते हैं:, forkबंद / खुली हुई फाइलें exec,।
आप स्विच उन करना चाहते हैं: fork, setuid, exec।
इन सभी चीजों को आवश्यकतानुसार जोड़ा जा सकता है। किसी प्रक्रिया विशेषता के एक नए प्रकार के साथ आता है, तो आप को बदलने की जरूरत नहीं है forkऔर exec।
जैसा कि उल्लेख किया गया है, अधिकांश आधुनिक यूनिक्स कॉपी-ऑन-राइट का उपयोग करते हैं, इसलिए forkमहत्वपूर्ण ओवरहेड शामिल नहीं है।
fork(2)लिनक्स के तहत मैन पेज कहता है:Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.मैं कल्पना करता हूं (लेकिन कुछ के लिए नहीं जानता) कि यह अन्य आधुनिक यूनिक्स स्वादों के लिए मामला है।