العمليات والإشارات
العمليات والإشارات
كل برنامج يعمل على نظام لينكس هو عملية (Process) — نسخة قيد التشغيل من برنامج ما، لها معرّف عملية خاص بها (PID)، ومساحة ذاكرة، ومواصفات ملفات، وحصة في جدول التشغيل. في بيئة الإنتاج، تتعامل مع العمليات باستمرار: تفحصها لتشخيص مشكلات الأداء، وترسل إشارات لإعادة تحميل الإعدادات دون انقطاع، وتدير الأولوية لحماية الأعباء الحرجة. هذا الدرس يمنحك الأدوات الكاملة.
فحص العمليات باستخدام ps
ps أداة للقطة آنية — تعرض حالة العمليات في لحظة تنفيذ الأمر. أكثر استدعاء مفيد هو ps aux، الذي يسرد جميع العمليات من جميع المستخدمين بتنسيق مقروء.
عمود STAT مهم في تشخيص الإنتاج. R = قيد التشغيل، S = نائمة (تنتظر I/O)، D = نوم غير قابل للمقاطعة (غالباً I/O للقرص — ارتفاع قيم D يشير إلى اختناق في التخزين)، Z = زومبي (انتهت العملية لكن العملية الأم لم تستدعِ wait() بعد)، T = موقوفة.
tini أو dumb-init بوصفهما PID 1 داخل الحاويات لاستيعاب العمليات اليتيمة بشكل صحيح.
المراقبة الآنية باستخدام top و htop
top هو المراقب الكلاسيكي التفاعلي للعمليات. يقدم الرأس ملخصاً على مستوى النظام (متوسط الحمل، سرقة CPU، الذاكرة)، ويعرض الجسم أكبر المستهلكين مرتبةً حسب CPU. اختصارات المفاتيح الأساسية داخل top: اضغط M للترتيب حسب الذاكرة، P للترتيب حسب CPU، k لإنهاء عملية بواسطة PID، 1 لعرض كل نواة على حدة (ضروري على الخوادم متعددة الأنوية)، q للخروج.
htop هو البديل الحديث — يضيف الألوان ودعم الفأرة ومقاييس لكل نواة وعرضاً شجرياً. ثبّته عبر مدير الحزم واستخدم htop -u nginx للتصفية الفورية حسب المستخدم.
top (مثل 2.40 1.87 1.52) تمثل متوسطات الحمل لمدة دقيقة واحدة و5 دقائق و15 دقيقة. متوسط حمل يساوي عدد أنوية CPU يعني إشباعاً كاملاً. على جهاز رباعي الأنوية، حمل ثابت عند 4.0 يعني 100% استخدام؛ 8.0 يعني أن العمل يتراكم في الطابور. راقب الاتجاه — ارتفاع متوسط الـ 15 دقيقة إنذار مبكر.
الإشارات: التواصل مع العمليات
الإشارات إشعارات غير متزامنة ترسل إلى عملية ما. يمكن للنواة أو أي مستخدم مخوّل إرسالها. شغّل kill -l لرؤية القائمة الكاملة. إليك الأكثر استخداماً في الإنتاج يومياً:
kill -9 لا تستطيع إغلاق اتصالات قاعدة البيانات، ولا تفريغ مخازن الكتابة المؤقتة، ولا تحرير الأقفال الاستشارية. هذا يسبب تلف البيانات في قواعد البيانات وملفات مكتوبة جزئياً وملفات قفل يتيمة تعيق التشغيل التالي. أرسل SIGTERM أولاً، وانتظر 5-30 ثانية، ثم تصعّد إلى SIGKILL فقط إذا رفضت العملية الخروج.
المقدمة والخلفية والتحكم في المهام
تتتبع الشل المهام — مجموعات العمليات المرتبطة بجلسة الطرفية الحالية. يمكنك تشغيل الأوامر في الخلفية لإبقاء الشل حرة، وتحريك المهام بين المقدمة والخلفية.
tmux أو screen. إذا انقطع اتصالك في منتصف العملية، تستقبل العملية SIGHUP وتنتهي. استخدم tmux — يحتفظ بالجلسات حية على الخادم بغض النظر عن اتصالك.
أولوية العمليات باستخدام nice و renice
يجدول لينكس العمليات باستخدام قيمة النعومة (niceness) من -20 (أعلى أولوية، أكثر أنانية) إلى +19 (أدنى أولوية، أكثر تعاوناً). القيمة الافتراضية هي 0. يستطيع root فقط تعيين قيم سالبة (أولوية أعلى).
nice +15 على مهام الدُفعات (شحن السجلات، التحليلات، التقارير المجدولة) ممارسة قياسية. يضمن ذلك أنه عند تحميل المضيف، تحصل العمليات الحرجة على CPU أولاً، وتتنازل مهمة الدُفعات بسلاسة. تفرض Kubernetes وcgroups هذا على مستوى أعلى في بيئات الحاويات، لكن مفهوم المجدول الأساسي متطابق.
البحث عن عملية بواسطة المنفذ أو الملف
أداتان أخريان تكملان مجموعتك اليومية: lsof (سرد الملفات المفتوحة) وfuser. كلتاهما تساعدانك في معرفة أي عملية تمتلك موردًا — ضروري لتشخيص أخطاء "العنوان قيد الاستخدام" عند النشر.
يمنحك الجمع بين هذه الأدوات — ps وtop وkill وjobs وnice وlsof — رؤية كاملة والسيطرة التامة على كل عملية قيد التشغيل على أي خادم لينكس. هذه الأنماط متطابقة سواء كنت تشخّص مضيفاً معدنياً أو تنفّذ أوامر داخل pod في Kubernetes.