الأخبار التكنولوجية والاستعراضات والنصائح!

كيفية تشغيل والتحكم في عمليات الخلفية على Linux

استخدم Bash shell في Linux لإدارة عمليات المقدمة والخلفية. يمكنك استخدام وظائف وإشارات التحكم في الوظائف في Bash لمنحك مزيدًا من المرونة في كيفية تشغيل الأوامر. سنوضح لك كيف.

كل شيء عن العمليات

عندما يتم تشغيل برنامج ما في نظام التشغيل Linux أو نظام التشغيل الشبيه بـ Unix ، تبدأ العملية. “العملية” هو اسم التمثيل الداخلي للبرنامج قيد التشغيل في ذاكرة الكمبيوتر. هناك عملية واحدة لكل برنامج نشط. في الواقع ، هناك عملية لكل شيء تقريبًا يعمل على جهاز الكمبيوتر الخاص بك. يتضمن مكونات بيئة سطح المكتب الرسومية (GDE) مثل GNOME أو KDE وشياطين النظام التي يتم إطلاقها عند بدء التشغيل.

لماذا تقريبا كل شيء يعمل؟ حسنًا ، لا تحتاج عناصر Bash المضمنة مثل CD و pwd والأسماء المستعارة إلى إطلاق عملية (أو “إنتاج”) عند تشغيلها. يقوم Bash بتشغيل هذه الأوامر داخل مثيل Bash shell الذي يعمل في نافذة المحطة الطرفية. هذه الأوامر سريعة على وجه التحديد لأنها لا تحتاج إلى بدء عملية حتى يتم تنفيذها. (يمكنك كتابة تعليمات في نافذة طرفية لرؤية قائمة برامج Bash المضمنة.)

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

مثال فوضوي

نبدأ عملية تتبع ping بسيطة. سنقوم باختبار اتصال المجال How-To Geek. سيتم تنفيذ هذا كعملية مقدمة.

ping www.wdzwdz.com

نحصل على النتائج المتوقعة من خلال التمرير لأسفل نافذة المحطة. لا يمكننا فعل أي شيء آخر في نافذة المحطة أثناء تشغيل الأمر ping. للخروج من الأمر ، اضغط على Ctrl + C.

Ctrl + C

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 1

يتم تمييز التأثير المرئي لـ Ctrl + C في لقطة الشاشة. يعطي ping ملخصًا موجزًا ​​ثم يتوقف.

دعنا نكرر ذلك. لكن هذه المرة نضغط على Ctrl + Z بدلاً من Ctrl + C. لن تكتمل المهمة. ستكون مهمة خلفية. نتحكم في نافذة المحطة مرة أخرى إلينا.

ping www.wdzwdz.com Ctrl + Z

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 2

يتم تمييز التأثير المرئي للضغط على Ctrl + Z في لقطة الشاشة.

هذه المرة قيل لنا أن العملية قد توقفت. توقف لا يعني الانتهاء. إنها مثل سيارة عند إشارة توقف. نحن لم نتخلص منه ونرميه. لا تزال على الطريق ، ثابتة وتنتظر الانطلاق. هذه العملية الآن وظيفة في الخلفية.

سيسرد أمر الوظائف الوظائف التي بدأت في جلسة المحطة الحالية. وبما أن الوظائف (حتمًا) عمليات ، يمكننا أيضًا استخدام الأمر ps لرؤيتها. دعنا نستخدم كلا الأمرين ونقارن مخرجاتهما. نحن نستخدم خيار T (المحطة الطرفية) لسرد العمليات التي تعمل في نافذة المحطة هذه فقط. لاحظ أنه ليست هناك حاجة لاستخدام واصلة – مع خيار T.

وظائف PS T

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 3

يخبرنا أمر الوظيفة:

[1]: الرقم الموجود بين قوسين مربعين هو رقم الوظيفة. يمكننا استخدام هذا للإشارة إلى الوظيفة عندما نحتاج إلى التحكم فيها بأوامر التحكم في الوظيفة. +: تشير علامة الجمع + إلى أن هذه هي الوظيفة التي ستتم معالجتها إذا استخدمنا أمر التحكم في الوظيفة بدون رقم وظيفة محدد. يطلق عليه الوظيفة القياسية. الوظيفة الافتراضية هي دائمًا آخر وظيفة تضاف إلى قائمة الوظائف. متوقفة: العملية لا تعمل. ربط www.wdzwdz.com: سطر الأوامر الذي بدأ العملية.

يخبرنا الأمر ps:

PID: معرف العملية للعملية. كل عملية لها معرّف فريد. TTY: نوع teletype الزائف (نافذة طرفية) التي تم تشغيل العملية منها. STAT: حالة العملية TID: مقدار الوقت الذي تستغرقه وحدة المعالجة المركزية (CPU) التي استهلكتها العملية. COMMAND: الأمر الذي بدأ معالجة.

هذه قيم شائعة لعمود STAT:

D: النوم المتواصل. العملية في حالة انتظار ، وعادة ما تنتظر الإدخال أو الإخراج ، ولا يمكن مقاطعتها. I: Idle.R: Running.S: Interruptible sleep.T: توقف بواسطة إشارة التحكم في الوظيفة. Z: عملية زومبي. تم إنهاء العملية ولكن لم يتم “تنظيفها” من خلال العملية الأصلية.

يمكن اتباع القيمة الموجودة في عمود STAT بأحد هذه المؤشرات الإضافية:

يمكننا أن نرى أن Bash لديه حالة Ss. يخبرنا حرف “S” الكبير أن قذيفة Bash نائمة وأنه يمكن مقاطعتها. بمجرد أن نحتاج إليه ، سوف يستجيب. يخبرنا حرف “s” الصغير أن shell هو مدير جلسة.

الأمر ping به الحالة T. وهذا يخبرنا أن الأمر ping قد تم إيقافه بواسطة إشارة التحكم في الوظيفة. في هذا المثال ، استخدمنا Ctrl + Z لوضعه في الخلفية.

يحتوي الأمر ps T على الحالة R ، والتي تعني التشغيل. + يشير إلى أن هذه العملية عضو في المجموعة الأمامية. لذلك يعمل الأمر ps T في المقدمة.

الأمر bg

يتم استخدام الأمر bg لاستئناف عملية الخلفية. يمكن استخدامه مع أو بدون رقم الوظيفة. إذا كنت تستخدمه بدون رقم الوظيفة ، فستظهر الوظيفة الافتراضية في المقدمة. لا تزال العملية قيد التشغيل في الخلفية. لا يمكنك إرسال أي مدخلات إليه.

إذا أصدرنا الأمر bg ، فسنستأنف أمر ping:

bg

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 4

يستأنف الأمر ping ونرى إخراج التمرير في النافذة الطرفية مرة أخرى. يظهر لك اسم الأمر الذي تمت إعادة تشغيله. تم تمييز هذا في لقطة الشاشة.

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 5

ولكن لدينا مشكلة. تعمل المهمة في الخلفية ولا تقبل الإدخال. فكيف نوقفه؟ Ctrl + C لا يفعل شيئًا. يمكننا رؤيتها أثناء كتابتها ولكن مهمة الخلفية لا تقبل ضغطات المفاتيح هذه ، لذا فهي تستمر في تنفيذ الأمر بمرح بعيدًا.

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 6

في الواقع ، نحن الآن في وضع مختلط غريب. يمكننا الكتابة في نافذة المحطة الطرفية ولكن ما نكتبه يتم مسحه بسرعة من خلال إخراج التمرير من الأمر ping. كل ما نكتبه يسري في المقدمة.

لإيقاف مهمة الخلفية لدينا ، نحتاج إلى عرضها في المقدمة ثم إيقافها.

الأمر fg

سيجلب الأمر fg مهمة في الخلفية إلى المقدمة. مثل الأمر bg ، يمكن استخدامه مع أو بدون رقم الوظيفة. إن استخدامه مع رقم الوظيفة يعني أنه سيعمل في وظيفة معينة. إذا تم استخدامه بدون رقم المهمة ، فسيتم استخدام آخر أمر تم إرساله إلى الخلفية.

إذا كتبنا fg ، فسيظهر أمر ping في المقدمة. يتم خلط الأحرف التي نكتبها مع إخراج الأمر ping ، ولكن يتم التعامل معها بواسطة shell كما لو تم إدخالها في سطر الأوامر كالمعتاد. وبالفعل ، من وجهة نظر قذيفة باش ، هذا بالضبط ما حدث.

السابق

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 7

والآن بعد أن أصبح لدينا أمر ping يعمل في المقدمة مرة أخرى ، يمكننا استخدام Ctrl + C لإيقافه.

Ctrl + C

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 8

نحن بحاجة لإرسال الإشارات الصحيحة

لم تكن جميلة تمامًا. من الواضح أن تشغيل العملية في الخلفية يعمل بشكل أفضل عندما لا تنتج العملية مخرجات ولا تتطلب إدخالاً.

لكن ، سواء كان فوضويًا أم لا ، فإن مثالنا قد حقق:

لوضع عملية في الخلفية ، إعادة العملية إلى حالة التشغيل في الخلفية ، إعادة العملية إلى المقدمة ، إنهاء العملية.

عندما تستخدم Ctrl + C و Ctrl + Z ، فإنك ترسل إشارات إلى العملية. هذه طرق مختصرة لاستخدام أمر القتل. هناك 64 إشارة مختلفة يمكن أن يرسلها الموتى. استخدم kill -l في سطر الأوامر لإدراجها في قائمة. الموتى ليسوا المصدر الوحيد لهذه الإشارات. يتم رفع بعضها تلقائيًا بواسطة عمليات أخرى في النظام

فيما يلي بعض من أكثرها شيوعًا.

SIGHUP: Signal 1. يتم إرسالها تلقائيًا إلى عملية عندما يتم إغلاق المحطة الطرفية التي تعمل فيها. SIGINT: Signal 2. يتم إرسالها إلى عملية تضغط على Ctrl + C. تم إحباط العملية وطُلب منك الإنهاء. SIGQUIT: Signal 3. يتم إرسالها إلى عملية إذا أرسل المستخدم إشارة خروج Ctrl + D.SIGKILL: Signal 9. يتم إنهاء العملية على الفور ولن تحاول إغلاقها تمامًا. العملية لا تنخفض بأمان. SIGTERM: Signal 15. هذه هي الإشارة الافتراضية المرسلة عن طريق القتل. إنها إشارة خروج البرنامج الافتراضية. SIGTSTP: Signal 20. يتم إرسالها إلى عملية عند استخدام Ctrl + Z. يوقف العملية ويضعها في الخلفية.

نحتاج إلى استخدام أمر kill لإصدار إشارات لا تحتوي على مجموعات مفاتيح مخصصة لها.

تحكم إضافي في العمل

يتم نقل العملية إلى الخلفية باستخدام Ctrl + Z في وضع الإيقاف. نحتاج إلى استخدام الأمر bg لبدء تشغيله مرة أخرى. يعد بدء برنامج كعملية خلفية مستمرة أمرًا سهلاً. أضف علامة & إلى نهاية سطر الأوامر.

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

احيانا صحيح؛ قم بعمل صدى “How-To Geek Loop Process” ؛ ينام 3 فعله &

احيانا صحيح؛  لا صدى

يتم إخبارنا برقم الوظيفة ومعرف العملية للعملية. رقم وظيفتنا هو 1 ومعرف العملية هو 1979. يمكننا استخدام هذه المعرفات للتحكم في العملية.

يبدأ الإخراج من الحلقة اللانهائية لدينا في الظهور في النافذة الطرفية. كما في السابق ، يمكننا استخدام سطر الأوامر ولكن أي أوامر نصدرها تتخللها ناتج عملية الحلقة.

إلخ

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 9

لإيقاف عمليتنا ، يمكننا استخدام الوظيفة لتذكير أنفسنا برقم الوظيفة ثم استخدام القتل.

تشير تقارير الوظائف إلى أن عمليتنا هي الوظيفة رقم 1. لاستخدام هذا الرقم مع القتل ، نحتاج إلى أن نسبقه بعلامة النسبة المئوية٪.

قتل المهمة٪ 1

كيفية تشغيل والتحكم في عمليات الخلفية على Linux 10

kill ترسل إشارة SIGTERM ، الإشارة رقم 15 ، إلى العملية وتنتهي. في المرة التالية التي تضغط فيها على Enter ، سيتم عرض حالة الوظيفة. يسرد العملية على أنها “ملغاة”. إذا لم تستجب العملية لأمر القتل ، فيمكنك رفعها قليلاً. استخدم القتل مع SIGKILL ، رقم الإشارة 9. فقط ضع الرقم 9 بين أمر القتل ورقم الوظيفة.

اقتل 9٪ 1

الأشياء التي غطيناها

Ctrl + C: يرسل SIGINT ، إشارة 2 ، إلى العملية – إذا قبلت المدخلات – ويطلب منها الإنهاء Ctrl + D: يرسل SISQUIT ، الإشارة 3 ، إلى العملية – إذا قبلت الإدخال – ويطلب منها الخروج. Ctrl + Z: يرسل إشارة SIGSTP ، إشارة 20 ، إلى العملية ويطلب منها التوقف (إحباط) وتصبح عملية في الخلفية .job: يسرد وظائف الخلفية ويظهر أرقام وظائفهم. إذا لم تحدد رقم مهمة ، فسيتم استخدام العملية الأخيرة التي تم تحويلها إلى مهمة خلفية. fg job_number: إحضار عملية الخلفية إلى المقدمة وإعادة تشغيلها. إذا لم تحدد رقم المهمة ، فسيتم استخدام آخر عملية تم تحويلها إلى مهمة في الخلفية. قيد التشغيل .kill٪ job_number: يرسل إشارة SIGTERM ، الإشارة 15 ، إلى العملية للقضاء عليها. اقتل 9٪ job_number: يرسل SIGKILL ، الإشارة 9 ، إلى العملية وينهيها فجأة.