التحكم في الوظائف (يونكس)
في أنظمة التشغيل يونكس أو الأنظمة الشبيهة بيونكس ، يُشير التحكم في العمليات إلى إدارة مجموعة من العمليات كعملية واحدة عبر سطر الأوامر . [ 1 ] تشمل ميزات التحكم التعليق، والاستئناف، والإنهاء، ويمكن تنفيذ ميزات أكثر تقدماً عن طريق إرسال إشارة إلى العملية. يُمكّن التحكم في العمليات المستخدم من إدارة المعالجة في بيئة المعالجة المتعددة القائمة على يونكس ، وهو يختلف عن التحكم العام في العمليات الحاسوبية .
طُبِّقَ نظام التحكم في العمليات لأول مرة في بيئة C shell بواسطة جيم كولب، [ 2 ] ثم في معهد IIASA في النمسا، مستفيدًا من ميزات نواة BSD 4.1 . وقد اعتمدته بيئة KornShell ، التي طُوِّرت في مختبرات Bell Labs ، ثم أُدخِلَ لاحقًا في إصدار SVR4 من بيئة Bourne shell ، وهو موجود في معظم بيئات Unix shell الحديثة.
وظيفة
تشمل المهمة جميع العمليات التي تبدأ لمعالجة سطر أوامر الصدفة . قد يبدأ سطر الأوامر البسيط عملية واحدة فقط، ولكنه قد ينتج عنه عدة عمليات، إذ يمكن للعملية إنشاء عمليات فرعية ، كما يمكن لسطر الأوامر تحديد سلسلة من الأوامر. على سبيل المثال، يقوم سطر الأوامر التالي بتحديد الأسطر التي تحتوي على النص "title"، وترتيبها أبجديًا، وعرض النتيجة في نافذة طرفية : grep title somefile.txt | sort | less. هذا يُنشئ ثلاث عمليات على الأقل: واحدة لـ grep، وواحدة لـ sort، وواحدة لـ less. تتيح ميزة التحكم في المهمة للصدفة إدارة هذه العمليات كوحدة واحدة.
رقم الوظيفة
تُعرَّف المهمة بواسطة مُعرِّف رقمي ، يُعرف أيضًا برقم المهمة، ويُصنَّف كمُعرِّف لأنه مرجع مجرد لمورد (مجموعة عمليات). %يمكن استخدام قيمة المُعرِّف، مسبوقة بـ ، مع أمر التحكم في المهمة لتحديد مهمة. تشير المراجع الخاصة %%و إلى %+المهمة الافتراضية، وهي المهمة التي سيتم اختيارها في حال عدم تحديد أي مهمة. [ 3 ] تشير وثائق Bash إلى المرجع (الذي يبدأ بـ %) باسم jobspec (اختصارًا لـ job specification). [ 4 ]
تُستخدم قيم مُعرّف التحكم في المهام عادةً في واجهة سطر الأوامر التفاعلية فقط. أما في البرمجة النصية، فتُستخدم قيم PGID بدلاً منها، لأنها أكثر دقة وموثوقية، وفي الواقع، يكون التحكم في المهام مُعطّلاً افتراضياً في سكربت باش.
المقدمة/الخلفية
بشكل افتراضي، تعمل المهمة في الواجهة الأمامية حيث تستخدم مدخلات ومخرجات تفاعلية . يدخل المستخدم سطر الأوامر ويتفاعل مع العمليات، لكن لا يمكنه إصدار أي أمر آخر حتى تنتهي المهمة الحالية. العديد من العمليات (مثل عرض الملفات) سريعة نسبيًا، لذا يمكن للمستخدم انتظار الاستجابة مع وقت توقف قصير، بينما تتطلب بعض العمليات (مثل التحرير) تفاعلًا لا يمكن تحقيقه إلا من خلال مهمة تعمل في الواجهة الأمامية. ولكن، إذا لم يكن التفاعل مطلوبًا، وكانت العملية تمنع الوصول إلى واجهة سطر الأوامر لفترة طويلة، فقد يرغب المستخدم في تشغيلها في الخلفية - حيث لا يمكن للعمليات الوصول إلى المدخلات التفاعلية، ولكن يمكن للمستخدم تنفيذ عمليات أخرى في الواجهة الأمامية بينما تعمل مهمة الخلفية بالتزامن. بشكل افتراضي، تُخرج مهام الخلفية إلى دفق الإخراج التفاعلي، مما يؤدي إلى تداخل مخرجات مهام الواجهة الأمامية والخلفية، مع العلم أنه يمكن للمستخدم إعادة توجيه مخرجات مهمة الخلفية لمنع ذلك.
يتحكم
يحدد معيار POSIX واجهة المستخدم للتحكم في العمليات - المصممة على غرار Korn shell. [ 5 ] عادةً ما يتم تنفيذ الأوامر كأوامر مدمجة في shell ، وليس كبرامج منفصلة .
- ابدأ في الخلفية
- إذا انتهى سطر الأوامر بـ
&، فإن المهمة تبدأ في الخلفية. - إيقاف المهمة الأمامية مؤقتًا
- يمكن إيقاف المهمة في المقدمة مؤقتًا بالضغط على Ctrl+ Z . في هذه الحالة، يمكن استئناف المهمة في الخلفية عبر
bgأو استئنافها في المقدمة عبرfg. - يأمر
fg - ينقل الأمر
fg(اختصارًا لـ " العملية الأمامية " ) المهمة التي تعمل في الخلفية إلى المقدمة، إما المهمة المحددة أو المهمة التي أُضيفت مؤخرًا إلى الخلفية إذا لم تُحدد أي مهمة. عند إيقاف المهمة الأمامية مؤقتًا (عبر + )، يستأنف هذا الأمر تشغيلها.Ctrl Z - يأمر
wait - يُوقف الأمر
waitالجلسة التفاعلية مؤقتًا حتى تكتمل مهام الخلفية المحددة، أو حتى تكتمل جميع مهام الخلفية الخاصة بالصدفة النشطة إذا لم يتم تحديد أي منها. [ 6 ] - يأمر
bg - يقوم الأمر
bg(اختصارًا لـ " الخلفية " ) بنقل المهمة الأمامية المتوقفة مؤقتًا إلى الخلفية واستئنافها. - يأمر
jobs - يقدم الأمر
jobsمعلومات حول كل مهمة تعمل في الخلفية بما في ذلك المعرف وسطر الأوامر وحالة التشغيل (متوقفة أو قيد التشغيل).
الإشارات
يتم تنفيذ الاتصال بين العمليات للتحكم في الوظائف عبر الإشارات .
عادةً، يحتفظ نظام التشغيل بمعلومات حول العمليات التي تعمل في الخلفية في جدول خاص بها. عند انتهاء جلسة تفاعلية (أي عند تسجيل خروج المستخدم )، يرسل نظام التشغيل إشارة SIGHUP إلى جميع العمليات، وينتظر حتى تنتهي مجموعات العمليات قبل إنهاء نفسه. توفر بعض أنظمة التشغيل أمرًا غير متوافق مع معيار POSIX disownلإزالة عملية من جدول العمليات. تصبح مجموعة العمليات هذه يتيمة ، ولن يرسل لها نظام التشغيل إشارة SIGHUP، ولن ينتظر حتى تنتهي. هذه إحدى الطرق لتمكين عملية كخدمة ( daemon) مملوكة مباشرةً للعملية الجذرية init . يوفر الأمر المتوافق مع معيار POSIX nohupطريقة بديلة لمنع إنهاء العملية بواسطة نظام التشغيل.
يؤدي تعليق المهمة الأمامية (عبر + ) إلى إرسال إشارة SIGTSTP (إيقاف طرفي) إلى العمليات في مجموعة العمليات الخاصة بهذه المهمة. افتراضيًا، تتسبب هذه الإشارة في توقف العملية مؤقتًا حتى يتمكن النظام من استئناف عملها. مع ذلك، يمكن للعملية تجاهل هذه الإشارة. كما يمكن إيقاف العملية مؤقتًا عبر إشارة SIGSTOP (إيقاف)، والتي لا يمكن تجاهلها.Ctrl Z
عندما يضغط المستخدم على + ، يرسل النظام إشارة SIGINT (مقاطعة) إلى كل عملية في مجموعة عمليات المهمة الأمامية، والتي تؤدي افتراضيًا إلى إنهائها، على الرغم من أن العملية يمكنها تجاهل الإشارة.Ctrl C
عند استئناف مهمة متوقفة (عبر الأمر ` bgsudo` أو `sudo` fg)، يقوم النظام بتغيير مجموعة العمليات الأمامية لطرفية التحكم في الجلسة ، ثم يستأنف المهمة بإرسال إشارة SIGCONT إلى جميع العمليات في مجموعة عمليات المهمة. إذا استؤنفت المهمة في المقدمة، تُعيّن مجموعة العمليات الأمامية لطرفية التحكم إلى مجموعة عمليات المهمة؛ أما إذا استؤنفت في الخلفية، فتُعيّن إلى مجموعة عمليات أخرى.
تُرسل إشارة SIGTTIN (للمدخلات) أو SIGTTOU (للمخرجات) إلى عملية تعمل في الخلفية وتحاول القراءة من أو الكتابة إلى طرفية التحكم الخاصة بها، وذلك لأن مجموعة عمليات هذه العملية تختلف عن مجموعة عمليات الطرفية الأمامية. تُوقف هذه الإشارات العملية افتراضيًا، ولكن يمكن التعامل معها بطرق أخرى. غالبًا ما تتجاوز أنظمة التشغيل إجراء الإيقاف الافتراضي لإشارة SIGTTOU بحيث تُرسل العمليات التي تعمل في الخلفية مخرجاتها إلى طرفية التحكم افتراضيًا.
في باش، يمكن للأمر killالمدمج (وليس الأمر ` bash` /bin/kill) إرسال إشارات إلى العمليات باستخدام معرّفها أو معرّف مجموعة العمليات. إرسال إشارة إلى عملية ما يرسلها إلى كل عملية في المجموعة. killيمكن للأمر `bash` إرسال أي إشارة إلى عملية ما؛ ومع ذلك، إذا كان الهدف هو إنهاء العمليات في النظام، فإن الإشارتين `SIGKILL` و` SIGTERM` (الافتراضيتين) هما الأنسب على الأرجح.
مراجع
- ↑ معيار IEEE 1003.1-2001، القسم 3.201، تم أرشفة المهمة بتاريخ 1 أغسطس 2019 في أرشيف الإنترنت (Wayback Machine).
- ↑ مقدمة بقلم بيل جوي في كتاب أندرسون، غيل؛ بول أندرسون (1986). الدليل الميداني لـ UNIX C Shell . برنتيس هول. ص. xvii. ISBN 0-13-937468-X.
- ↑ معيار IEEE 1003.1-2001، القسم 3.203، التحكم في الوظيفة، معرف الوظيفة. مؤرشف بتاريخ 9 أكتوبر 2010 في أرشيف الإنترنت (Wayback Machine).
- ↑ "7.1 أساسيات التحكم في الوظائف" . مؤرشف من الأصل بتاريخ 2016-08-02 . تم الاطلاع عليه بتاريخ 2016-07-22 .
- ↑ – مرجع Shell والأدوات المساعدة، مواصفات UNIX الموحدة ، الإصدار 5 من مجموعة Open Group ؛ – مرجع Shell والأدوات المساعدة، مواصفات UNIX الموحدة ، الإصدار 5 من مجموعة Open Group .
- ↑ كيريسك، مايكل (2 فبراير 2025). "wait(1p) — صفحة دليل لينكس" . man7.org . مؤرشف من الأصل في 16 مايو 2025. تم الاطلاع عليه في 13 مايو 2025 .
للمزيد من القراءة
- مارشال كيرك ماكوسيك وجورج ف. نيفيل-نيل (2004-08-02). "إدارة العمليات في FreeBSD: مجموعات العمليات والجلسات" . تصميم وتنفيذ نظام التشغيل FreeBSD . أديسون ويسلي. ISBN 0-201-70245-2.
روابط خارجية
- "التحكم في الوظائف"، دليل مرجعي لـ Bash
- يونكس
