ديف أوبس

إدارة العمليات في لينكس

إدارة العمليات (Process) في لينكس باستخدام الطرفية

تُعد إدارة العمليات في نظام لينكس من المهام الحيوية التي تمكّن المستخدمين والمشرفين من التحكم الكامل في كيفية تشغيل البرامج والعمليات المختلفة، سواء كانت هذه العمليات نشطة في الخلفية أو تعمل في واجهة المستخدم. تعد الطرفية (Terminal) الأداة الأساسية للتفاعل مع نظام التشغيل لينكس، ومن خلالها يمكن تنفيذ عمليات معقدة مثل مراقبة العمليات، إدارة أولوية تنفيذها، إيقافها، استئنافها، أو حتى قتلها نهائياً.

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


مفهوم العملية (Process) في نظام لينكس

العملية هي وحدة أساسية في نظام التشغيل، تمثل برنامجًا قيد التنفيذ. يمكن أن تكون العملية عبارة عن برنامج بسيط كملف نصي يتم تنفيذه أو تطبيق معقد متعدد الخيوط (threads). في لينكس، كل عملية تتمتع بمعرف فريد يسمى معرف العملية (Process ID – PID).

كل عملية في لينكس تمتلك حالة معينة يمكن أن تتغير خلال دورة حياتها، مثل:

  • Running (جارٍ التنفيذ): العملية تعمل حالياً على المعالج.

  • Sleeping (نائمة): العملية تنتظر حدثًا معينًا أو موردًا ليصبح متاحًا.

  • Stopped (متوقفة): العملية توقفت مؤقتًا عن التنفيذ.

  • Zombie (زومبي): عملية انتهت ولكنها لا تزال لها مدخل في جدول العمليات لأنها لم تُجمع بعد من قبل العملية الأم.


أدوات الطرفية لإدارة العمليات في لينكس

1. أمر ps

أمر ps (process status) هو أحد الأوامر الأساسية التي تُستخدم لعرض قائمة العمليات الجارية في النظام. يوفر معلومات حول PID، المستخدم الذي يملك العملية، استهلاك الموارد، حالة العملية، وغيرها.

مثال:

bash
ps aux
  • a: عرض العمليات لجميع المستخدمين.

  • u: عرض العمليات مع تفاصيل المستخدم.

  • x: عرض العمليات غير المرتبطة بطرفية.

توضيح الأعمدة في ناتج ps aux:

العمود الوصف
USER اسم المستخدم الذي يملك العملية
PID معرف العملية
%CPU نسبة استخدام المعالج
%MEM نسبة استخدام الذاكرة
VSZ حجم الذاكرة الظاهرية (كيلوبايت)
RSS حجم الذاكرة الفعلية (كيلوبايت)
TTY الطرفية المرتبطة بالعملية
STAT حالة العملية
START وقت بدء العملية
TIME الوقت الذي استغرقته العملية
COMMAND الأمر الذي بدأ العملية

2. أمر top

أمر top هو أداة تفاعلية تُظهر قائمة العمليات في الوقت الفعلي، مع تحديث مستمر لاستهلاك الموارد، مثل المعالج والذاكرة. يمكن من خلال top التحكم بالعمليات، مثل تغيير أولوية تنفيذها أو قتلها مباشرة.

بعض الأوامر داخل top:

  • P: ترتيب العمليات حسب استهلاك المعالج.

  • M: ترتيب العمليات حسب استهلاك الذاكرة.

  • k: قتل عملية عبر إدخال PID.

  • r: تغيير أولوية عملية (renice).


3. أمر htop

أداة htop هي نسخة محسنة من top، توفر واجهة أكثر سهولة وتفاعلية، مع إمكانية التمرير، والبحث، والتصفية، وكذلك القدرة على قتل أو إيقاف العمليات بسهولة.


4. أمر kill

يستخدم أمر kill لإرسال إشارات إلى العمليات، عادةً لإيقافها أو قتلها. يرسل الأمر الإشارة إلى عملية معينة بواسطة PID.

التركيب الأساسي:

bash
kill [signal] PID
  • إذا لم يُحدد الإشارة، يُرسل الإشارة الافتراضية SIGTERM (15) التي تطلب من العملية الإنهاء بطريقة نظيفة.

  • لإجبار عملية على الإنهاء الفوري، تستخدم إشارة SIGKILL (9):

bash
kill -9 PID

5. أمر killall

يشبه kill، لكن يتم استخدامه لقتل جميع العمليات التي تحمل اسمًا معينًا، دون الحاجة إلى معرفة الـ PID.

مثال:

bash
killall firefox

6. أمر pkill

يشبه killall لكنه أكثر مرونة، حيث يسمح بإرسال الإشارات للعمليات بناءً على أنماط نصية (regex) في أسماء العمليات.


7. أمر jobs

يعرض قائمة العمليات التي يتم تشغيلها في الخلفية من داخل الطرفية الحالية، مع تحديد أرقام الوظائف (jobs) الخاصة بها.


8. أمر fg و bg

  • fg: يُعيد تشغيل عملية من الخلفية إلى المقدمة (foreground).

  • bg: يُعيد تشغيل عملية متوقفة أو معلقة في الخلفية.


9. أمر nice و renice

nice

يُستخدم لتشغيل عملية مع أولوية منخفضة أو مرتفعة (قيمة “nice” أعلى تعني أولوية أقل).

bash
nice -n 10 command
  • القيمة الافتراضية للـ nice هي 0.

  • القيم تتراوح من -20 (أعلى أولوية) إلى 19 (أدنى أولوية).

renice

يستخدم لتغيير أولوية عملية قيد التنفيذ.

bash
renice -n 5 -p PID

فهم إشارات العمليات Signals في لينكس

الإشارات هي طريقة للتواصل مع العمليات، وتعبر عن أوامر أو تحذيرات معينة. منها:

الإشارة الرقم الوصف
SIGHUP 1 إعادة تحميل الإعدادات
SIGINT 2 إيقاف العملية (Ctrl+C)
SIGQUIT 3 إيقاف العملية مع تفريغ
SIGKILL 9 قتل العملية فورًا
SIGTERM 15 طلب إنهاء نظيف
SIGSTOP 19 إيقاف العملية مؤقتًا
SIGCONT 18 استئناف عملية متوقفة

إدارة العمليات في الخلفية (Background) والمقدمة (Foreground)

في الطرفية، العمليات يمكن تشغيلها في الخلفية أو المقدمة:

  • المقدمة (Foreground): حيث يتم التفاعل مع العملية مباشرة.

  • الخلفية (Background): حيث تستمر العملية بالعمل دون التداخل مع الطرفية، مما يسمح بتنفيذ أوامر أخرى.

تشغيل عملية في الخلفية

يتم ذلك بوضع & في نهاية الأمر:

bash
./script.sh &

نقل عملية من المقدمة إلى الخلفية

يمكن استخدام مفتاح Ctrl + Z لإيقاف مؤقت لعملية، ثم:

bash
bg

لتشغيلها في الخلفية.


التعامل مع العمليات المتوقفة والمعلقة

عندما يتم إيقاف عملية (مثل الضغط على Ctrl + Z)، تصبح معلقة. يمكن استئنافها في الخلفية أو المقدمة باستخدام bg و fg.


مراقبة الأداء باستخدام أدوات متقدمة

أمر pidstat

يوفر إحصائيات تفصيلية عن استهلاك كل عملية للمعالج والذاكرة.

مثال:

bash
pidstat 1

يعرض تحديثًا كل ثانية.

أمر iotop

يعرض العمليات التي تستهلك الموارد على مستوى الإدخال/الإخراج (قراءة وكتابة الأقراص).


حالات خاصة في إدارة العمليات

العمليات اليتيمة (Orphan Processes)

هي العمليات التي فقدت العملية الأم التي أنشأتها، وتصبح في عهدة init أو systemd.

العمليات الزومبي (Zombie Processes)

هي العمليات التي انتهت ولكن لم يتم تنظيفها من جدول العمليات بعد. يمكن رؤيتها بحالة Z في ps.


جدول مقارنة بين بعض أوامر إدارة العمليات في لينكس

الأمر الوظيفة الاستخدام الأساسي ملاحظات
ps عرض قائمة العمليات ps aux عرض ثابت، غير تفاعلي
top مراقبة العمليات بشكل تفاعلي top تحديث مستمر، تحكم بالعمليات
htop نسخة محسنة من top htop واجهة أفضل، سهولة في الاستخدام
kill إرسال إشارة لعملية kill -9 PID قتل أو إيقاف العمليات
killall قتل جميع العمليات باسم معين killall process_name مفيد عند معرفة اسم العملية فقط
pkill إرسال إشارة بناءً على نمط pkill -f pattern أكثر مرونة من killall
jobs عرض العمليات في الخلفية jobs مخصص للجلسة الطرفية الحالية
fg إرجاع عملية إلى المقدمة fg %job_number التعامل مع عمليات الخلفية
bg تشغيل عملية في الخلفية bg %job_number مفيد عند إيقاف عملية مؤقتًا

الخلاصة

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

مع معرفة عميقة بهذه الأدوات، يمكن تحقيق أداء محسّن للنظام، استقرار أكبر، وإدارة أفضل للمهام والخدمات. كما أن معرفة كيفية التعامل مع العمليات الزومبي واليتيمة يساهم في الحفاظ على نظافة النظام وكفاءته.


المصادر والمراجع

  1. Linux man pages (صفحات المساعدة لأوامر ps، top، kill وغيرها).

  2. كتاب “Linux System Programming” – Robert Love, الذي يتناول بالتفصيل إدارة العمليات والبرمجة على مستوى نظام التشغيل لينكس.