استخدام ميزة التحكم بالوظيفة (Bash’s Job Control) لإدارة العمليات في لينكس
تعتبر ميزة التحكم بالوظيفة (Job Control) في بيئة سطر الأوامر في نظام لينكس من الميزات الأساسية التي توفر للمستخدمين القدرة على إدارة العمليات بسهولة وفعالية. تتيح هذه الميزة للمستخدمين التحكم في العمليات التي يتم تنفيذها في الخلفية أو في المقدمة، مما يعزز القدرة على العمل مع العديد من المهام في نفس الوقت. يعتمد التحكم بالوظيفة في لينكس بشكل أساسي على استخدام أوامر خاصة مثل bg، fg، jobs وkill، بالإضافة إلى استخدام إشارات (signals) لتنظيم كيفية تشغيل العمليات.
الفهم الأساسي للتحكم بالوظيفة
في نظام لينكس، كل عملية يتم تنفيذها تعتبر “وظيفة” (Job) ويمكن أن تعمل إما في المقدمة أو في الخلفية. الفكرة الأساسية وراء التحكم بالوظيفة هي أن النظام يسمح للمستخدم بإيقاف العمليات مؤقتًا أو استئنافها، وتحويلها بين المقدمة والخلفية بسهولة. على سبيل المثال، قد يبدأ المستخدم عملية ثقيلة في الخلفية بينما يقوم في الوقت نفسه بتشغيل أوامر أخرى في المقدمة.
العمليات في المقدمة والخلفية
العمليات في المقدمة (Foreground Jobs)
عندما يقوم المستخدم بتشغيل أمر في سطر الأوامر بدون إضافة أي مؤشرات خاصة، فإن العملية تعمل في المقدمة. بينما تكون العملية في المقدمة، لا يمكن للمستخدم تنفيذ أي أوامر أخرى في نفس نافذة الطرفية إلا بعد أن تنتهي هذه العملية. على سبيل المثال، عند تشغيل أمر مثل:
bash$ nano myfile.txt
سيتم فتح محرر النصوص nano في المقدمة، ولن يمكن للمستخدم إدخال أي أوامر أخرى حتى يتم إغلاق المحرر.
العمليات في الخلفية (Background Jobs)
بخلاف العمليات التي تعمل في المقدمة، يمكن أيضًا تشغيل العمليات في الخلفية. هذا يتيح للمستخدم مواصلة العمل مع سطر الأوامر بينما تستمر العمليات الأخرى في العمل. لتشغيل عملية في الخلفية، يمكن إضافة الرمز & في نهاية الأمر. على سبيل المثال:
bash$ sleep 100 &
سيتم تشغيل الأمر sleep في الخلفية، مما يعني أن المستخدم يمكنه الاستمرار في استخدام الطرفية لإدخال أوامر أخرى.
أوامر التحكم بالوظيفة في Bash
1. الأمر jobs
يتيح الأمر jobs للمستخدم رؤية جميع الوظائف التي يتم تشغيلها حاليًا في الجلسة الخاصة به. يعرض الأمر jobs قائمة بالوظائف مع رقم معرف الوظيفة (Job ID) وحالتها (هل هي في المقدمة، في الخلفية، أو متوقفة). على سبيل المثال:
bash$ jobs
[1]+ 12345 Running sleep 100 &
[2]- 12346 Stopped nano myfile.txt
في المثال أعلاه، يوجد هناك وظيفتان: الأولى تعمل في الخلفية (sleep 100)، والثانية تم إيقافها مؤقتًا (nano myfile.txt).
2. الأمر bg
يستخدم الأمر bg لاستئناف عملية متوقفة مؤقتًا وتشغيلها في الخلفية. على سبيل المثال، إذا كانت هناك عملية متوقفة برقم معرف الوظيفة 2، يمكن استئنافها في الخلفية باستخدام الأمر:
bash$ bg %2
يشير %2 إلى رقم معرف الوظيفة في الأمر jobs. ستستأنف العملية في الخلفية وسيتم تنفيذها بشكل كامل.
3. الأمر fg
في المقابل، يستخدم الأمر fg لنقل عملية من الخلفية إلى المقدمة. إذا كانت هناك عملية تعمل في الخلفية وترغب في نقلها إلى المقدمة، يمكن استخدام:
bash$ fg %1
هذا يقوم بتشغيل الوظيفة التي تحمل الرقم 1 في المقدمة.
4. الأمر kill
عند التعامل مع العمليات في لينكس، قد تحتاج في بعض الأحيان إلى إيقاف عملية قيد التنفيذ. يمكن استخدام الأمر kill لإرسال إشارات إلى العمليات لتوجيهها لإيقافها أو إنهائها. على سبيل المثال، لإيقاف عملية معينة باستخدام رقم المعرف الخاص بها:
bash$ kill 12345
يمكن أيضًا إرسال إشارات مختلفة للتحكم في العمليات بشكل أكثر تحديدًا. على سبيل المثال، لإرسال إشارة SIGKILL لقتل عملية قسريًا، يمكن استخدام:
bash$ kill -9 12345
الانتقال بين المقدمة والخلفية
أحد الاستخدامات الأكثر شيوعًا للتحكم بالوظيفة هو القدرة على نقل العمليات بين المقدمة والخلفية بسهولة. إذا كنت قد بدأت عملية في المقدمة وترغب في نقلها إلى الخلفية، يمكنك استخدام:
-
إيقاف العملية مؤقتًا: اضغط على
Ctrl+Zأثناء تشغيل عملية في المقدمة، مما يوقفها مؤقتًا. -
نقل العملية إلى الخلفية: بعد إيقاف العملية مؤقتًا، يمكن نقلها إلى الخلفية باستخدام الأمر
bg. -
إعادة العملية إلى المقدمة: يمكنك نقل العملية من الخلفية إلى المقدمة باستخدام الأمر
fg.
التفاعل مع العمليات المتعددة
ميزة التحكم بالوظيفة في Bash توفر أيضًا إمكانيات قوية للتفاعل مع العمليات المتعددة في نفس الوقت. يمكن للمستخدم العمل مع عدة عمليات في نفس الوقت عبر استخدام الخلفية والمقدمة. يمكن تشغيل عدة أوامر في نفس الوقت في الخلفية، مما يزيد من الإنتاجية ويسهل العمل مع العديد من المهام في وقت واحد.
على سبيل المثال، يمكن تشغيل ثلاثة أوامر في الخلفية في وقت واحد:
bash$ command1 & $ command2 & $ command3 &
سيتم تنفيذ هذه الأوامر في الخلفية، مما يتيح للمستخدم الاستمرار في العمل مع العمليات الأخرى في الطرفية.
الحفظ والاستئناف
يُعتبر حفظ واستئناف العمل من الخصائص المتقدمة التي يتيحها التحكم بالوظيفة. يمكن للمستخدم حفظ حالة العمليات المتوقفة واستخدام الأوامر المناسبة لاستئنافها عند الحاجة. كما أنَّ معرفة كيفية التعامل مع العمليات المتوقفة بشكل فعال يمكن أن يساعد في إدارة المهام بشكل أفضل في بيئة طرفية متعددة المهام.
إشارات النظام والتحكم في العمليات
في نظام لينكس، يتم إرسال إشارات (signals) إلى العمليات للتحكم في سلوكها. يمكن إرسال إشارات مثل SIGSTOP لإيقاف عملية مؤقتًا، وSIGCONT لاستئناف عملية متوقفة، وSIGTERM لإنهاء العملية بشكل طبيعي. عند استخدام التحكم بالوظيفة في Bash، يتم التعامل مع بعض هذه الإشارات بشكل غير مباشر عبر الأوامر مثل bg وfg.
تعتبر إشارات SIGKILL وSIGSTOP من الإشارات الأكثر أهمية، حيث:
-
SIGKILL: إشارة قسرية تُستخدم لقتل العملية فورًا. -
SIGSTOP: إشارة تُستخدم لإيقاف العملية مؤقتًا.
يمكن إرسال هذه الإشارات باستخدام أمر kill:
bash$ kill -9 12345 # لإرسال SIGKILL
$ kill -19 12345 # لإرسال SIGSTOP
الخاتمة
تعتبر ميزة التحكم بالوظيفة (Job Control) في Bash من الأدوات الأساسية التي تسهم في تحسين الإنتاجية وزيادة الفعالية في بيئات سطر الأوامر في لينكس. باستخدام أوامر مثل jobs، bg، fg وkill، يمكن للمستخدم إدارة العمليات بسهولة وتوجيهها بين المقدمة والخلفية حسب الحاجة. من خلال هذه الميزات، يمكن للمستخدمين التعامل مع العديد من المهام في وقت واحد، مما يوفر بيئة عمل مرنة وفعالة.

