Spawn (الحوسبة)

في علوم الحاسوب ، تُعرف الدالة spawn بأنها دالة تقوم بتحميل وتنفيذ عملية فرعية جديدة . قد تنتظر العملية الحالية انتهاء العملية الفرعية أو قد تستمر في تنفيذ عمليات حسابية متزامنة . يتطلب إنشاء عملية فرعية جديدة مساحة ذاكرة كافية لتنفيذ كل من العملية الفرعية والبرنامج الحالي.

توجد مجموعة من وظائف التوليد في نظام التشغيل DOS ، والتي ورثتها مايكروسوفت ويندوز .

توجد أيضًا عائلة مختلفة من وظائف التوليد في امتداد اختياري لمعايير POSIX . [ 1 ]

وظائف التشغيل في نظامي التشغيل DOS/Windows

استُلهمت وظائف spawn في نظامي DOS/Windows من وظائف Unixfork ؛ execإلا أنه نظرًا لعدم دعم هذه الأنظمة لوظيفة fork، فقد تم توفير وظيفة spawn كبديل لوظيفة fork-exec. مع ذلك ، ورغم أن وظيفة spawn تُغطي معظم حالات الاستخدام الشائعة بكفاءة، إلا أنها تفتقر إلى كامل إمكانيات fork-exec، إذ قد تتغير إعدادات أي عملية تبقى بعد تنفيذ exec بعد عملية fork. ولكن في معظم الحالات، يُمكن تعويض هذا النقص باستخدام CreateProcessواجهة برمجة التطبيقات (API) ذات المستوى الأدنى.

في عمليات الاستدعاء spawnl، يرث البرنامج الفرعي بيئة البرنامج الأصلي spawnlp. وتبقى الملفات المفتوحة عند إجراء الاستدعاء مفتوحة في البرنامج الفرعي.spawnvspawnvpspawn

النموذج الأولي

intspawnl(intmode,char*path,char*arg0,...);
intspawnle(intmode,char*path,char*arg0,...,char*envp[]);
intspawnlp(intmode,char*path,char*arg0,...);
intspawnlpe(intmode,char*path,char*arg0,...,char*envp[]);
intspawnv(intmode,char*path,char*argv[]);
intspawnve(intmode,char*path,char*argv[],char*envp[]);
intspawnvp(intmode,char*path,char*argv[]);
intspawnvpe(intmode,char*path,char*argv[],char*envp[]);

أسماء الدوال

الاسم الأساسي لكل دالة هو spawn ، متبوعًا بحرف واحد أو أكثر:

خطابملحوظات
ليتم تمرير وسائط سطر الأوامر بشكل فردي إلى الدالة.
vيتم تمرير وسائط سطر الأوامر إلى الدالة كمصفوفة من المؤشرات.
صيستخدم متغير وسيطة PATH للعثور على الملف المراد تنفيذه.
هـيتم تمرير مصفوفة من المؤشرات إلى وسائط البيئة بشكل صريح إلى العملية الفرعية.

وضع

تحدد هذه modeالوسيطة طريقة تشغيل البرنامج الفرعي. القيم المتاحة لها modeهي:

اسمملحوظات
P_OVERLAYيُدمج هذا الإجراء العملية الأصلية مع العملية الفرعية، مما يؤدي إلى تدمير العملية الأصلية. وهذا له نفس تأثير وظائف exec* .
P_WAITيعلق العملية الأصلية حتى تنتهي العملية الفرعية من التنفيذ (التوليد المتزامن).
P_NOWAIT،P_NOWAITOيستمر في تنفيذ العملية المستدعِية بالتزامن مع العملية الجديدة (عملية إنشاء غير متزامنة).
P_DETACHيتم تشغيل العملية الفرعية في الخلفية دون الوصول إلى وحدة التحكم أو لوحة المفاتيح. _cwaitستفشل الاستدعاءات على العملية الجديدة (إنشاء غير متزامن).

طريق

يُحدد الوسيط pathاسم ملف البرنامج المراد تنفيذه. في spawnlpحالة spawnvpعدم وجود مسار للملف أو عدم وجوده في المجلد الحالي، يُحدد متغير البيئة PATH المجلدات التي سيتم البحث فيها عن الملف. السلسلة التي يُشير إليها الوسيط argv[0]هي اسم البرنامج المراد تشغيله.

يتكون سطر الأوامر المُمرر إلى البرنامج المُنشأ من سلاسل الأحرف، arg0من إلى argn، في spawnالاستدعاء. يختلف الحد الأقصى المقبول لطول هذه السلاسل مجتمعة بين المُترجمات، حيث يتراوح من 128 حرفًا في Digital Mars [ 2 ] إلى 1024 حرفًا في Microsoft Visual C++ [ 3 ] أو بقدر ما تسمح به الذاكرة في DJGPP [ 4 ]argn . يجب أن يكون الوسيط الأخير بعد مؤشرًا فارغًا .

argv

الوسيط argvعبارة عن مصفوفة من مؤشرات الأحرف. يجب أن يكون المؤشر الأخير في المصفوفة فارغًا للإشارة إلى نهاية القائمة.

بيئة

تسمح استدعاءات spawnle` spawnlpe<environment>` spawnveو`<environment>` و`<environment>` spawnvpeللمستخدم بتغيير بيئة العملية الفرعية عن طريق تمرير قائمة بإعدادات البيئة في الوسيط envp. هذا الوسيط عبارة عن مصفوفة من مؤشرات الأحرف؛ يشير كل مؤشر (باستثناء الأخير) إلى سلسلة نصية منتهية بـ `null` تُعرّف متغير بيئة . يأخذ متغير البيئة الشكل التالي:

الاسم = القيمة

حيث nameيمثل اسم المتغير valueوقيمته. المؤشر الأخير في المصفوفة فارغ. عندما envpتكون قيمة الوسيط فارغة، يرث العنصر الفرعي إعدادات بيئة العنصر الأصل.

في نظام التشغيل مايكروسوفت ويندوز، تُستخدم دوال spawn* لتشغيل العملية المُنشأة؛ وإذا فشل ذلك، تُجرى محاولة لإنشاء عملية MS-DOS عادية. عند إنشاء تطبيق ويندوز، يمكن الحصول على مُعرّف المثيل باستخدام . من الممكن تحديد كيفية عرض البرنامج المُنشأ باستخدام الدوال ، و ، و .LoadModuleexec_instancehandleget_exec_showset_exec_showget_exec_showreset

القيم المُعادة

تشير القيمة المُعادة إلى حالة خروج البرنامج المُنشأ. القيمة صفر تعني أن البرنامج قد نُفِّذ بنجاح. القيمة الموجبة تعني أن البرنامج قد نُفِّذ، ولكن تم إيقافه أو انتهى بخطأ، والقيمة المُعادة هي حالة خروج العملية الفرعية. القيمة السالبة تعني أن البرنامج لم يُنفَّذ، وهي errnoمُعيَّنة. في نظام التشغيل مايكروسوفت ويندوز، spawnتُعيد هذه الدالة رمز الخطأ المنفي المُعاد من LoadModuleالدالة الأصلية للتوافق مع مكتبة وقت تشغيل لغة C. قد تُصادف رموز الخطأ التالية:

قيمةملحوظات
-2 لم يتم العثور على الملف
-3 لم يتم العثور على المسار
-11 ملف .exe غير صالح (لنظام التشغيل ويندوز)
-13 تطبيق DOS 4.0
-14 نوع ملف تنفيذي غير معروف (قد يكون ملفًا موسعًا لنظام DOS)

وظائف إنشاء POSIX

يمكن استخدام و و كبديلين لـ و posix_spawn(3p)، لكنهما لا يوفران نفس المرونة التي يوفرها استخدام و بشكل منفصل. قد يكونان بديلين فعالين لـ و ، لكن الغرض منهما هو توفير أدوات إنشاء العمليات في البيئات المدمجة التي لا تدعم بسبب نقص ترجمة العناوين الديناميكية ؛ ومع ذلك، قد تقوم أنظمة التشغيل الشبيهة بنظام يونكس التي تدعم ترجمة العناوين الديناميكية بشكل كامل بتنفيذهما أيضًا.posix_spawnpforkexecforkexecforkexecfork

تاريخ

spawnاستُخدمت الاستعارة، أي إنتاج النسل كما في وضع البيض، مبكرًا في نظام التشغيل VMS، المعروف الآن باسم OpenVMS (1977). وفي الأوساط الأكاديمية، دار نقاش حاد بين مؤيدي نظام يونكسfork (الذي يعتمد على نسخ تخطيط الذاكرة بشكل بدائي، ولكنه سريع) ومؤيدي نظام VMS (الذي يعتمد على بناء موثوق لمعلمات العمليات، ولكنه أبطأ). وقد عاد هذا النقاش إلى الواجهة عندما ورث نظام ويندوز NT (1993) spawnآلية إنشاء النسل من نظام VMS .

انظر أيضاً

ملحوظات

  1. يُطبّق نظام ويندوز الفرعي لنظام لينكس وظيفة fork. قد تحتوي بيئات POSIX الأخرى، مثل Cygwin، على تطبيق مماثل، ولكن لا يُنصح باستخدامه نظرًا لاختلاف نموذج العمليات بين POSIX وويندوز. لا تُعدّ fork جزءًا من واجهة برمجة تطبيقات ويندوز ، ومعظم برامج ويندوز لا تستخدم هذه البيئات، وبالتالي لا يمكنها الوصول إلى fork.

مراجع