فهم العمليات (Processes) ومراقبة استهلاك الموارد (top, htop, ps, kill)

دقائق القراءة: 5

فهم العمليات (Processes) ومراقبة استهلاك الموارد (top, htop, ps, kill)

إدارة العمليات في لينكس ليست مجرد مهارة تشغيلية، بل هي جزء أساسي من فهم سلوك النظام وتحليل الأداء وحل الأعطال. عندما يعمل أي برنامج، فإنه يتحول إلى عملية لها معرّف خاص، وذاكرة، وأولوية، ووقت معالجة على المعالج. لذلك فإن إتقان أدوات مثل ps وtop وhtop وkill يرفع قدرتك على إدارة الخوادم وأجهزة لينكس بكفاءة عالية.

إذا كنت قد قرأت سابقاً مقدمة إلى عالم لينكس: التاريخ، الفلسفة، وفهم النواة (Kernel) فستعرف أن النواة هي المسؤولة عن جدولة العمليات وتوزيع الموارد. ومن هنا تأتي أهمية مراقبة ما يحدث داخل النظام لحظة بلحظة، خصوصاً عند بطء الخادم أو استهلاك الذاكرة أو توقف خدمة حساسة.

ما هي العملية في لينكس؟

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

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

حالات العمليات الشائعة

  • R: عملية قيد التنفيذ أو جاهزة للتنفيذ.
  • S: في حالة نوم قابل للمقاطعة، وتنتظر حدثاً معيناً.
  • D: نوم غير قابل للمقاطعة، غالباً أثناء انتظار عمليات إدخال/إخراج.
  • Z: عملية شبحية Zombie انتهى تنفيذها لكن لم تُنظَّف بعد.
  • T: عملية متوقفة أو معلّقة.

ظهور عدد كبير من العمليات في حالة D أو Z قد يكون مؤشراً على مشكلة أعمق في التخزين أو في التطبيق نفسه، وليس مجرد استهلاك موارد عابر.

أداة ps: التقاط صورة ثابتة للعمليات

الأمر ps يعرض لقطة فورية للعمليات الجارية. وهو مثالي عند الحاجة إلى استعلام سريع، أو عند دمجه مع الأنابيب وإعادة التوجيه (Pipes and Redirections: |, >, >>) أو مع أدوات البحث مثل البحث المتقدم في النظام باستخدام (find, locate, grep).

أمثلة عملية على ps

ps
ps aux
ps -ef
ps aux | grep nginx
ps -u www-data
ps -p 1234 -o pid,ppid,user,%cpu,%mem,cmd

الصيغة ps aux من أكثر الصيغ استخداماً، لأنها تعرض العمليات لجميع المستخدمين مع نسب استهلاك المعالج والذاكرة وسطر الأمر الكامل. أما ps -ef فهي مفضلة في بعض التوزيعات والإجراءات الإدارية.

عند العمل من الدخول الأول إلى الطرفية (Terminal): الأوامر الأساسية والمساعدة (man, help) ستلاحظ أن ps مفيد جداً لفهم شجرة العمليات ومراقبة الأوامر التي أطلقتها بنفسك أو التي تعمل كخدمات نظام.

أداة top: المراقبة الحية للمعالج والذاكرة

إذا كان ps يقدم صورة ثابتة، فإن top يقدم لوحة مراقبة مباشرة تتحدث باستمرار. هذه الأداة أساسية عند تحليل الأحمال العالية، أو عند اكتشاف عملية تستهلك المعالج أو الذاكرة بشكل غير طبيعي.

تشغيل top وأهم ما يظهر فيه

top

في أعلى الشاشة ستجد معلومات عامة مثل وقت تشغيل النظام، وعدد المستخدمين، ومتوسط الحمل load average، ثم استهلاك المعالج والذاكرة الفعلية وذاكرة التبديل swap.

في القسم السفلي تظهر العمليات مرتبة عادة حسب استهلاك المعالج. الأعمدة المهمة تشمل PID وUSER و%CPU و%MEM وTIME+ وCOMMAND.

اختصارات مفيدة داخل top

  • الضغط على P للترتيب حسب استهلاك المعالج.
  • الضغط على M للترتيب حسب الذاكرة.
  • الضغط على k لإرسال إشارة إلى عملية.
  • الضغط على 1 لعرض كل نواة معالج بشكل منفصل.

أداة htop: تجربة تفاعلية أكثر وضوحاً

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

تثبيت وتشغيل htop

sudo apt install htop
htop

إن لم تكن الأداة مثبّتة، يمكنك استخدام مدير الحزم المناسب حسب توزيعتك كما شرحنا في إدارة الحزم البرمجية وتحديث النظام (APT, YUM/DNF, Pacman). بعد تشغيلها ستتمكن من الفرز، والبحث، وإنهاء العمليات، وحتى عرض الشجرة الهرمية للعلاقات بين العمليات.

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

إنهاء العمليات باستخدام kill و killall

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

أشهر الإشارات المستخدمة

  • SIGTERM أو الرقم 15: طلب إنهاء منظم ومحترم.
  • SIGKILL أو الرقم 9: إنهاء إجباري وفوري.
  • SIGHUP: يُستخدم أحياناً لإعادة تحميل الإعدادات.

أمثلة عملية على kill

kill 1234
kill -15 1234
kill -9 1234
killall nginx
pkill -f python

ابدأ دائماً بـ SIGTERM قبل اللجوء إلى SIGKILL. الإنهاء القسري قد يمنع التطبيق من حفظ البيانات أو تنظيف الملفات المؤقتة الموجودة مثلاً داخل المسارات التي تعرفت عليها في هيكلية ملفات لينكس (Filesystem Hierarchy Standard – FHS).

استخدام kill -9 يجب أن يكون آخر حل، خصوصاً مع قواعد البيانات والخدمات الإنتاجية، لأنه يتجاوز آليات الإغلاق الآمن.

سيناريو عملي لتحليل استهلاك الموارد

لنفترض أن الخادم أصبح بطيئاً بشكل مفاجئ. التسلسل الاحترافي للتحليل يكون عادة كالتالي:

  1. تشغيل top أو htop لمعرفة ما إذا كانت المشكلة من المعالج أو الذاكرة.
  2. تحديد PID الخاص بالعملية المشبوهة.
  3. استخدام ps -p PID -o pid,ppid,user,%cpu,%mem,cmd للحصول على تفاصيل أوضح.
  4. فحص السجلات أو ملفات الخدمة باستخدام أدوات النصوص مثل أدوات عرض ومعالجة النصوص (cat, nano, vim, less, tail).
  5. إذا ثبت أن العملية معلقة أو خارجة عن السيطرة، أرسل لها SIGTERM أولاً.

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

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

خلاصة

فهم العمليات في لينكس يمنحك رؤية أعمق لما يجري داخل النظام، ويحوّل التعامل مع الأعطال من رد فعل عشوائي إلى تحليل منهجي دقيق. الأداة ps مناسبة للاستعلامات السريعة، وtop وhtop ممتازتان للمراقبة الحية، بينما يتيح kill التدخل المنضبط عند الحاجة.

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

20 comments

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *