यह इंटरफ़ेस को सरल बनाने के लिए है। करने के लिए वैकल्पिक 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.
मैं कल्पना करता हूं (लेकिन कुछ के लिए नहीं जानता) कि यह अन्य आधुनिक यूनिक्स स्वादों के लिए मामला है।