سؤال

بعد عملية الشوكات والابن المتشعب يستدعي execv ، هل ما زالت النتيجة ابن الأب؟

هل كانت مفيدة؟

المحلول

تقوم Fork بإنشاء عملية جديدة تسمى طفل الوالد ..... Exec تحل محل برنامج التشغيل الحالي بالعملية Exec'd وبالتالي تظل عملية الطفل للوالد ...

نصائح أخرى

نعم. لا ينشئ execv عملية جديدة - لهذا السبب تحتاج إلى شوكة أولاً.

نعم إنه كذلك. كما أن مصطلحات "عائلة العملية" قريبة بشكل غير مريح من "مجموعة العملية" وهو مفهوم مهم للغاية.

أنت على المسار الصحيح. أساسا ، و شوكة (2) قامت Call System Call في Old Unix بإنشاء نسخة من العملية التي تربط ، مع PID جديد ومكدس عملية جديد ، ونسخ مساحة الذاكرة للقيام بذلك. ال exec يقوم بتحميل العملية الحالية مع صورة جديدة. يمكنك رؤية نسخة واحدة من ذلك في exec العملية في معظم الأصداف - وهي الصورة المطلوبة في العملية التي احتلتها القشرة.

عندما تتفوق على عملية ، أعادت مكالمة نظام الشوكة مجموعة العملية الجديدة ، إذا كنت الوالد ، أو 0 إذا كنت الطفل. ترث عملية الطفل أيضًا جميع واصفات الملفات المفتوحة ، ولا سيما 0،1 ، و 2 ، والتي تُعرف بشكل أكثر شيوعًا باسم stdin و stdout و stderr.

(مسابقة البوب: كيف تفترض أن القذيفة تدير إعادة التوجيه ، على سبيل المثال مع >?)

أكثر متغيرات UNIX حداثة مع مساحات عناوين أكبر (يونيكس الأصلي فقط كان لديه 64 كيلوكل كلمة المجموع!) تنفذ شوكة المتغير vfork هذا ينسخ فقط المجموعة الفرعية اللازمة للعملية للبدء في التشغيل ، ويعتمد على مدير الذاكرة لسحب الباقي إذا لزم الأمر. نظرًا لأن Times Fork يتبعها EXEC فورًا ، والتي تحتاج إلى تحميل صورة جديدة على أي حال ، فهذا تحسين مهم.

يأخذ ماخ هذه الخطوة إلى الأمام ؛ عندما تقوم بإنشاء عملية PPROCESS جديدة ، لا يتم نسخ أي شيء إلا ما تحتاجه لسياق تنفيذ ؛ الصورة هي نفسها بالضبط. يحدث النسخ فقط عندما تغير العملية موقعًا في الذاكرة ، وفي هذه النقطة يتم نسخ الصفحة التي تحتوي على هذا الموقع. وهذا ما يسمى "نسخة على الكتابة" ، وهو الأمثل تقريبا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top