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

في الجزء العلوي من النتيجة، يمكنك تحديد إحصائيات النظام. يمنحك هذا معلومات حول أشياء مثل حمل النظام وعدد المهام. في هذا المثال، يمكنك تحديد أن هناك عملية واحدة قيد التشغيل و 55 عملية خاملة. العمليات الخاملة أو النائمة هي تلك التي لا تستخدمها حاليًا. هذا يعني أنها لا تشغل موارد النظام. أخيرًا، يمكنك رؤية جميع العمليات الجارية بالقرب من الجزء السفلي من النافذة المنبثقة مع إحصائيات الاستخدام.
- htop
قبل استخدام هذا الأمر، سيتعين عليك تثبيته من المستودعات عن طريق كتابة وتشغيل ما يلي:
|
1 |
sudo apt-get install htop |
بمجرد الحصول عليه، يمكنك استخدامه لعرض معلومات مماثلة لتلك التي عرضتها باستخدام top. الفرق الأساسي هو أنه مع الأمر htop، تحصل على نتيجة أكثر سهولة في الاستخدام:
|
1 |
htop |

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

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

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

في هذا المثال، يمكنك رؤية كيف يتم عرض kthreadd كأب للعمليات التي تليها لاحقًا.
- ما هي معرفات العمليات؟
كمستخدم Linux أو Unix، يجب أن تعرف عن معرفات العمليات. تُعرف أيضًا باسم PIDs، وهي هويات فريدة يتم تعيينها لكل عملية بواسطة النظام. هذه الهويات هي الطريقة التي يتتبع بها الخادم كل عملية فردية. لمعرفة معرف العملية (PID) لعملية معينة، يجب عليك استخدام الأمر pgrep، على النحو التالي:
|
1 |
pgrep bash |
|
1 2 |
المخرج: 1340 |
عند تشغيل نظامك، تبدأ العملية الأولى في العمل. تسمى هذه العملية init. كآلية افتراضية، تحصل عملية init على معرف العملية '1'. يمكنك التحقق من معرف العملية (PID) لهذه العملية على النحو التالي:
|
1 |
pgrep init |
|
1 2 |
المخرج: 1 |
تتحمل عملية 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. يساعدك هذا الأمر، كما يوحي اسمه، على إنهاء عملية أو قتلها:
|
1 |
kill PIDoftarget_process |
ترسل هذه الأداة المساعدة إشارة TERM إلى العملية مما يخبرها بإنهاء العملية. يجعل هذا الأمر التطبيق يقوم بعملية التنظيف والخروج بسهولة. في حال لم يخرج البرنامج بسلاسة عند تلقي إشارة TERM، يمكنك الانتقال مباشرة وتجاوزها باستخدام إشارة KILL:
|
1 |
kill -KILL PIDoftarget_process |
لا تذهب هذه الإشارة إلى البرنامج، بل تذهب إلى نواة نظام التشغيل. ستقوم النواة بإغلاق العملية مباشرة. يمكنك استخدام هذا عندما يتجاهل البرنامج الإشارات التي ترسلها إليه.
في هذا الأمر، يمكنك أيضًا استبدال اسم الإشارة بالرقم المرتبط بها. على سبيل المثال، يمكنك استخدام ‘-15’ بدلاً من ‘-TERM’. وبالمثل، يمكنك استبدال ‘-KILL’ بـ ‘-9’.
- استخدام الإشارات لأغراض مختلفة
يمكنك استخدام الإشارات للقيام بأشياء أخرى بصرف النظر عن قتل البرامج أو إنهائها. على سبيل المثال، إحدى المشكلات التي قد تواجهها هي التعامل مع إعادة تشغيل العمليات الخلفية (daemons). في كل مرة تتلقى فيها العملية الخلفية إشارة تعليق أو HUP، ستتم إعادة تشغيلها في برامج مثل Apache. لتجاوز هذا، يمكنك استخدام الإشارة التالية:
|
1 |
sudo kill -HUP pidofapache |
سيجعل هذا الأمر Apache يعيد تحميل تكوينه. ونتيجة لذلك، سيستمر في تقديم المحتوى ذي الصلة لك.
إذا كنت تريد رؤية الإشارات التي يمكنك إرسالها باستخدام أداة kill، فاستخدم الأمر التالي:
|
1 |
kill -l |

- إرسال الإشارات بالاسم
تقليديًا، كنت ترسل إشارة باستخدام معرف العملية (PID) للبرنامج. ومع ذلك، لديك خيار إرسال الإشارات باستخدام الاسم العادي للعملية. للقيام بذلك، يمكنك استخدام الأمر pkill. وهو يعمل بشكل مشابه لكيفية عمل أمر pkill. الفرق الوحيد هو أنه يسمح لك باستخدام اسم العملية:
|
1 |
pkill -9 ping |
أمر pkill هذا يعادل أمر kill التالي:
|
1 |
kill -9 `pgrep ping` |
لديك أيضًا أمر عندما تريد إرسال إشارة إلى كل مثيل بدلاً من عملية معينة. الأمر التالي سيرسل إشارة TERM إلى جميع مثيلات Firefox التي تعمل على النظام:
|
1 |
killall firefox |
ضبط أولويات العمليات
شيء آخر يمكنك القيام به باستخدام أوامر Linux هو ضبط الأولويات. هذا يعني أنه يمكنك تحديد العملية التي لها الأولوية في بيئة الخادم الخاصة بك. قد تكون هناك عمليات معينة تعتبرها بالغة الأهمية. وقد لا تكون العمليات الأخرى ضرورية بنفس القدر. لن يقوم النظام بتنفيذ البرامج الأخيرة إلا عندما تتبقى بعض الموارد.
يمكنك التحكم في أولوية العمليات في Linux من خلال أمر niceness. تشير هذه القيمة إلى المهام ذات الأولوية العالية على أنها أقل لطفًا (less nice) والعمليات ذات الأولوية المنخفضة على أنها أكثر لطفًا (more nice). فكر في الأمر على هذا النحو: العمليات ذات الأولوية العالية تكون أقل لطفًا لأنها تحتكر الموارد. بينما تشارك المهام ذات الأولوية المنخفضة الموارد لذا فهي أكثر لطفًا.
يمكنك رؤية قيمة nice لعملية معينة عند تشغيل الأمر top. توجد هذه القيمة في عمود 'NI'. ستحتوي المهام ذات الأولوية العالية على قيم nice تتراوح بين '-19/-20'. وتتراوح العمليات ذات الأولوية المنخفضة بين '19/20'. سترى شيئًا كهذا:
|
1 |
top |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
المهام: 56 الإجمالي, 1 قيد التشغيل, 55 خامل, 0 متوقف, 0 زومبي المعالج(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st الذاكرة: 1019600k الإجمالي, 324496k المستخدم, 695104k الحر, 8512k المخازن المؤقتة مساحة التبديل: 0k الإجمالي, 0k المستخدم, 0k الحر, 264812k المخزن مؤقتًا PID المستخدم PR NI VIRT RES SHR S %CPU %MEM الوقت+ الأمر 1635 root 20 0 17300 1200 920 R 0.3 0.1 0:00.01 top 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0 |
إذا كنت تريد تشغيل عملية بقيمة nice مخصصة شخصيًا، فما عليك سوى استخدام الأمر nice:
|
1 |
nice -n 15 commandtoexecute |
لن يعمل هذا الأمر إلا عند بدء تشغيل البرنامج المحدد. إذا كنت تريد تغيير قيمة nice لبرنامج قيد التشغيل بالفعل، فيجب عليك استخدام renice:
|
1 |
renice 0 PIDtoprioritize |
الخاتمة
كما ترى، فإن الأدوات هنا تختلف تمامًا عن الأدوات الرسومية. ونتيجة لذلك، قد يكون من الصعب على المبتدئين فهمها. سيساعدك هذا الدليل على التعرف على الأوامر. ستساعدك المزيد من الممارسة على التعلم بشكل أفضل واستخدامها بكفاءة أكبر.
تحقق من مواردنا الأخرى التي يمكن أن تساعدك في إدارة خوادم Linux الخاصة بك بشكل أفضل، بما في ذلك البرامج التعليمية حول كيفية تكوين خادم Linux الخاص بك لاستخدام المصادقة القائمة على مفتاح SSH, تحديد موقع الملفات على نظام Linux VPS الخاص بك باستخدام whereis و which و whatis و readlink و find، و قراءة وتعيين متغيرات البيئة والغلاف (shell) على خادم Linux VPS.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.