محتويات الدورة

Bash / المتقدم: القنوات والتزامن وتصميم واجهة قابلة للصيانة / الدرس 14

تنسيق المهام المملوكة ونتائج الإشارات

افصل نجاح الإطلاق والإكمال وتتبع هويات الأبناء وعالج الإشارة المحدودة للمملوك فقط.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • حفظ $! وانتظار كل ابن مطلوب.
  • تمييز التحكم التفاعلي من تنسيق البرامج.
  • تفسير الإشارة والانتظار دون معرفات مخمنة.

الإطلاق غير المتزامن ليس عملاً مكتملاً

يبدأ & العمل ويكمل الأب ولا تمثل الحالة الفورية النهاية. احفظ $! واربط الابن بالمهمة. تستعيد wait نتيجة المملوك وقد تفشل فتحتاج معالجة. لا يثبت الخروج بعد الإطلاق الإكمال. عيّن وجهات أو بروتوكولاً للخرج المتزامن ولا تفترض ترتيب الكتابة.

ليست أسماء المهام التفاعلية واجهة برنامج

تدير التفاعلية المجموعات والمقدمة والخلفية والإشارات الطرفية. الموقوف لم ينته وقد تضم المهمة عدة عمليات. لا تعتمد البرامج أرقام التفاعلية أو طرفية معينة؛ احفظ الأبناء وانتظر. يعاد المعرف بعد العمر ولا يصلح رقم قائمة قديمة للإشارة أو تطابق اسم يشمل غير متعلق.

bash جمع حالتي إكمال ابنين مملوكين
( exit 0 ) &
first=$!
( exit 4 ) &
second=$!
wait "$first"
first_status=$?
wait "$second"
second_status=$?
printf 'first=%s second=%s\n' "$first_status" "$second_status"
الناتج المتوقع
first=0 second=4

يُنتظر الابنان المنشآن فقط ويعيد الثاني أربعة عمداً ويسجل الأب النتيجتين وينهي المثال بنجاح.

اختيار صيغ wait وفق الإصدار المدعوم

تدعم الحديثة -n للتالي و-p لتعريفه بشروط، ولا تفترضهما بالتاريخية أو sh. يمكن للأقدم انتظار المعرفات أو حاجز دفعة. قد لا يعني انتظار قاطعته إشارة اكتمال الابن. سجل الدعم واختبر الإلغاء وغياب الأبناء والفشل المتعدد.

تطلب الإشارات سلوكاً موثقاً

يرسل kill إشارة لا إنهاءً قسرياً دائماً. قد يعالج البرنامج المناسب ولا يعالج KILL وSTOP. استخدم الأسماء لا أرقاماً عامة. عرف تمرير الإلغاء والانتظار والتنظيف ونتيجة الأب. يرسل المثال إشارة لصدفة ابنه نفسها فقط لا المضيف أو غير متعلق؛ لا تستبدل الملكية بقتل عام.

bash معالجة إشارة داخل ابن مؤقت
bash -c 'trap "echo handled-USR1" USR1; kill -s USR1 "$$"; echo continued'
الناتج المتوقع
handled-USR1
continued

تستهدف الداخلية نفسها وتكمل بعد الفخ دون اختيار عملية المضيف أو تخمين معرف.

تعريف النتيجة العامة قبل الإطلاق

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

الأخطاء الشائعة وإصلاحها

الإبلاغ عن الإطلاق نجاح مهمة

لماذا يحدث؟
لم ينتظر الأب النتيجة.
كيف تصلحه؟
احفظ الابن وعالج الانتظار.
كيف تتجنب تكراره؟
افصل البدء والإكمال بالسجل.

اعتبار الموقوف منتهياً

لماذا يحدث؟
اختلط التعليق بالإنهاء.
كيف تصلحه؟
افحص الحالة واختر فعلاً للمملوك.
كيف تتجنب تكراره؟
اختبر الوقوف والخروج والإلغاء.

إرسال إشارة لمعرف قديم

لماذا يحدث؟
لم يحفظ العمر والملكية.
كيف تصلحه؟
اعمل على أبناء حاليين مملوكين صراحة.
كيف تتجنب تكراره؟
احفظ الهوية وتجنب التطابق العام.

اختبر فهمك

1. يفشل ابنان بحالتين. ماذا يحفظ المنسق؟

اعرض الحل المشروح

احفظ الهويتين والحالتين وطبق سياسة موثقة كفشل أي مطلوب. لا تجعل printf الأخيرة تستبدل نتيجة المستدعي وافصل التنظيف.

2. لماذا يحتاج wait المقاطع قرار عمر آخر؟

اعرض الحل المشروح

قد يعيد الفخ wait دون إثبات النهاية. يقرر المنسق الانتظار أو إلغاء مملوك أو العودة وفق السياسة.

أهم ما تعلمته

  • تتبع المملوك واجمع إكماله الحقيقي.
  • صرح الإلغاء والتجميع ودعم الإصدار.

المراجع الرسمية