العودة إلى المدونة

إدارة العمليات في Linux - دليل حول استخدام ps و kill و nice

إدارة العمليات في Linux - دليل حول استخدام ps و kill و nice

مقدمة

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

في Linux، نشير إلى كل تطبيق باسم 'عملية'. الخادم قادر على إدارة الجانب منخفض المستوى لدورة حياة العملية. كمستخدم، قد تحتاج إلى التفاعل مع الخادم للتحكم في بعض الجوانب ذات المستوى الأعلى. يمكنك التواصل مع نظام التشغيل وإدارته باستخدام أدوات مختلفة. هناك العديد من الأوامر التي يمكنك استخدامها لتعديل جوانب ووظائف مختلفة للخادم. إليك دليل سهل المتابعة تعليمي حول كيفية إعداد خادمك القائم على Linux بسهولة على Ubuntu. يمكنك أيضًا معرفة كيفية تثبيت حزمة LAMP (Linux و Apache و MySQL و PHP).

يركز هذا الدليل على كيفية استخدام ps و kill و nice لإدارة العمليات في Linux.

عرض العمليات الجارية في Linux

  • top

بادئ ذي بدء، أحد أهم الأوامر الأساسية التي يجب أن تعرفها هو top. تساعدك هذه الأداة على تصور العمليات التي تعمل حاليًا على النظام. إليك كيف ستظهر عند تشغيلها:

top command output

 

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

  • htop

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

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

htop command output

كما ترى، هذه النتيجة سهلة المتابعة والتفسير.

استخدام ps لسرد العمليات

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

دعنا نستكشف ما ستراه إذا قمت بتشغيل الأمر كما هو:

ps command output

في هذا المخرج، يمكنك رؤية جميع العمليات التي تعمل فيما يتعلق بالمستخدم والجلسة الحاليين. ومع ذلك، هذا لا يعطيك الكثير من المعلومات.

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

ps aux

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

output in tree format

في هذا المثال، يمكنك رؤية كيف يتم عرض kthreadd كأب للعمليات التي تليها لاحقًا.

  • ما هي معرفات العمليات؟

كمستخدم Linux أو Unix، يجب أن تعرف عن معرفات العمليات. تُعرف أيضًا باسم PIDs، وهي هويات فريدة يتم تعيينها لكل عملية بواسطة النظام. هذه الهويات هي الطريقة التي يتتبع بها الخادم كل عملية فردية. لمعرفة معرف العملية (PID) لعملية معينة، يجب عليك استخدام الأمر pgrep، على النحو التالي:

عند تشغيل نظامك، تبدأ العملية الأولى في العمل. تسمى هذه العملية init. كآلية افتراضية، تحصل عملية init على معرف العملية '1'. يمكنك التحقق من معرف العملية (PID) لهذه العملية على النحو التالي:

تتحمل عملية init مسؤولية تشغيل جميع البرامج أو العمليات الأخرى بعد ذلك. وبطبيعة الحال، سيكون للعمليات التالية معرفات عمليات (PIDs) متزايدة أو أكبر.

  • ما هي العمليات الأب؟

مفهوم آخر يجب معرفته هو العملية الأب (parent process). إذا أنشأت العملية A العملية B، فإن العملية A هي العملية الأب للعملية B. وللمساعدة في التمييز بينهما، يخصص النظام للعمليات الأب معرف PPID. يمكنك ملاحظة معرف PPID هذا في رؤوس الأعمدة كلما قمت بتشغيل أي أمر إدارة مثل top و htop و ps.

  • ما هي علاقات الأب والابن (Parent-Child Relationships)؟

كما نعلم بالفعل، تقوم العمليات الأب بإنشاء عمليات ابن. يحدث هذا الإنشاء في خطوتين. الأولى هي fork(). يبدأ هذا بإنشاء مساحة عنوان جديدة. كما يقوم بنسخ موارد الأب باستخدام النسخ عند الكتابة (copy-on-write) بحيث تكون متاحة في العملية الابن أيضًا. الخطوة الثانية هي exec(). وهي مسؤولة عن تحميل وتشغيل ملف قابل للتنفيذ في مساحة العنوان التي تم إنشاؤها حديثًا.

  • ماذا لو ماتت العملية الابن قبل العملية الأب؟

في حال حدوث ذلك، تصبح العملية الابن عملية زومبي (zombie). ويستمر ذلك حتى تجمع العملية الأب بعض المعلومات عنها أو تخبر النواة (kernel) بأنها لا تحتاج إلى المعلومات المرتبطة بها. وبمجرد حدوث ذلك، ستصبح الموارد التي كانت تستخدمها العملية حرة الآن.

  • ماذا لو ماتت العملية الأب قبل العملية الابن؟

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

إرسال الإشارات إلى العمليات في Linux

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

  • استخدام PID لإرسال الإشارات

إحدى الأدوات المساعدة التي يمكنك استخدامها لإرسال الإشارات في Linux هي kill. يساعدك هذا الأمر، كما يوحي اسمه، على إنهاء عملية أو قتلها:

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

لا تذهب هذه الإشارة إلى البرنامج، بل تذهب إلى نواة نظام التشغيل. ستقوم النواة بإغلاق العملية مباشرة. يمكنك استخدام هذا عندما يتجاهل البرنامج الإشارات التي ترسلها إليه.

في هذا الأمر، يمكنك أيضًا استبدال اسم الإشارة بالرقم المرتبط بها. على سبيل المثال، يمكنك استخدام ‘-15’ بدلاً من ‘-TERM’. وبالمثل، يمكنك استبدال ‘-KILL’ بـ ‘-9’.

  • استخدام الإشارات لأغراض مختلفة

يمكنك استخدام الإشارات للقيام بأشياء أخرى بصرف النظر عن قتل البرامج أو إنهائها. على سبيل المثال، إحدى المشكلات التي قد تواجهها هي التعامل مع إعادة تشغيل العمليات الخلفية (daemons). في كل مرة تتلقى فيها العملية الخلفية إشارة تعليق أو HUP، ستتم إعادة تشغيلها في برامج مثل Apache. لتجاوز هذا، يمكنك استخدام الإشارة التالية:

سيجعل هذا الأمر Apache يعيد تحميل تكوينه. ونتيجة لذلك، سيستمر في تقديم المحتوى ذي الصلة لك.

إذا كنت تريد رؤية الإشارات التي يمكنك إرسالها باستخدام أداة kill، فاستخدم الأمر التالي:

list of signals

  • إرسال الإشارات بالاسم

تقليديًا، كنت ترسل إشارة باستخدام معرف العملية (PID) للبرنامج. ومع ذلك، لديك خيار إرسال الإشارات باستخدام الاسم العادي للعملية. للقيام بذلك، يمكنك استخدام الأمر pkill. وهو يعمل بشكل مشابه لكيفية عمل أمر pkill. الفرق الوحيد هو أنه يسمح لك باستخدام اسم العملية:

أمر pkill هذا يعادل أمر kill التالي:

لديك أيضًا أمر عندما تريد إرسال إشارة إلى كل مثيل بدلاً من عملية معينة. الأمر التالي سيرسل إشارة TERM إلى جميع مثيلات Firefox التي تعمل على النظام:

ضبط أولويات العمليات

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

يمكنك التحكم في أولوية العمليات في Linux من خلال أمر niceness. تشير هذه القيمة إلى المهام ذات الأولوية العالية على أنها أقل لطفًا (less nice) والعمليات ذات الأولوية المنخفضة على أنها أكثر لطفًا (more nice). فكر في الأمر على هذا النحو: العمليات ذات الأولوية العالية تكون أقل لطفًا لأنها تحتكر الموارد. بينما تشارك المهام ذات الأولوية المنخفضة الموارد لذا فهي أكثر لطفًا.

يمكنك رؤية قيمة nice لعملية معينة عند تشغيل الأمر top. توجد هذه القيمة في عمود 'NI'. ستحتوي المهام ذات الأولوية العالية على قيم nice تتراوح بين '-19/-20'. وتتراوح العمليات ذات الأولوية المنخفضة بين '19/20'. سترى شيئًا كهذا:

إذا كنت تريد تشغيل عملية بقيمة nice مخصصة شخصيًا، فما عليك سوى استخدام الأمر nice:

لن يعمل هذا الأمر إلا عند بدء تشغيل البرنامج المحدد. إذا كنت تريد تغيير قيمة nice لبرنامج قيد التشغيل بالفعل، فيجب عليك استخدام renice:

الخاتمة

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

تحقق من مواردنا الأخرى التي يمكن أن تساعدك في إدارة خوادم Linux الخاصة بك بشكل أفضل، بما في ذلك البرامج التعليمية حول كيفية تكوين خادم Linux الخاص بك لاستخدام المصادقة القائمة على مفتاح SSH, تحديد موقع الملفات على نظام Linux VPS الخاص بك باستخدام whereis و which و whatis و readlink و find، و قراءة وتعيين متغيرات البيئة والغلاف (shell) على خادم Linux VPS.

حوسبة سعيدة!

author

Akshay Nagpal

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.