السيد لينكس قتل العملية باستخدام ps، pgrep، pkill والمزيد

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

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

بحلول نهاية المقال، ستكون قادرًا على إدارة العمليات استنادًا إلى أرقام التعريف الفريدة للعمليات (PIDs) من سطر الأوامر كمحترف Linux. استمر في القراءة لتتعلم كل شيء عن أوامر إدارة العمليات في Linux!

المتطلبات الأولية

سيكون هذا المقال مدرسة حول كيفية إدارة العمليات في Linux. إذا كنت ترغب في التفاعل، ستحتاج إلى ما يلي:

  • A Linux host, which can be a virtual machine or a physical machine.
  • لتجربة أمثلة PowerShell، قم بتثبيت PowerShell 7.1.1 على مضيف Linux.
  • A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.

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

هل أنت مستعد للبدء؟ رائع، لنبدأ.

إدارة العمليات في Linux

بمناسبة، قد تصادف حالة حيث تحتاج إلى إيقاف تشغيل عملية قيد التشغيل على نظام Linux. كمثال، قد يكون لديك سكريبت باش يعمل وفقًا لجدول زمني. تم تكوين هذا السكريبت للتشغيل كمستخدم آخر عبر وظيفة cron (جدول مجدول عمليات Linux).

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

في الأقسام التالية، ستقوم بشرح الأوامر المستخدمة لتحديد موقع وإنهاء أو قتل العمليات على نظام Linux. ستتطور كل قسم على القسم السابق. ستتعرف على أوامر ps، top، pgrep، kill، و pkill جميعها مدمجة في Linux.

كمكافأة، يتم تضمين أوامر مكافئة في PowerShell Get-Process و Stop-Process إذا لم تكن الأوامر الأصلية في Linux هي ذوقك.

أدوات لتحديد المواقع الخاصة بالعمليات

قبل قتل عملية، يجب عليك تحديد العملية الصحيحة المستهدفة. يسمح رقم التعريف الفريد (PID) بالاستهداف الدقيق. تابع القراءة لتعلم كيفية تحديد العمليات الصحيحة للإنهاء.

استخدام أمر ps لعرض معلومات العملية

الأمر ps أو حالة العملية يعرض معلومات تتعلق بالعمليات النشطة على نظام Linux. يمكنك تحديد عملية تعمل وحتى عمليات الخلفية باستخدام ps.

سيقوم الأمر ps، افتراضيًا، بعرض جميع العمليات لـ تحديد معرف المستخدم الفعّال (EUID) للمستخدم الحالي. تشغيل الأمر ps، كما هو موضح أدناه، سيُعيد كل عملية تعمل يمكن للمستخدم إنهاءها.

ps
Displaying processes matching the EUID (effective user ID) for the user bkindle.

البحث عن معلومات عملية موسعة باستخدام أمر top

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

عند تشغيل الأمر top، سترى أكثر من معرّف عملية. بالإضافة إلى تفاصيل العملية، تتضمن نسب الـ CPU والذاكرة، قيم النايس (أولوية تسلسل العملية CPU)، وأولوية العملية (PR) المُعينة بواسطة نواة Linux.

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

The top command on Ubuntu Desktop 20.04 LTS showing all running PID’s.

htop هو نسخة محسّنة من top تتضمّن تحسينات متعددة، مثل إخراج الطرفية الملوّن.

لنفترض أنك ترغب في فحص الذاكرة أو موارد وحدة المعالجة المركزية التي يستهلكها عملية. في هذه الحالة، يمكنك استخدام مفتاح p في top كما هو موضّح أدناه.

top -p 2113
The top command displaying information on only one PID, 2113.

ربما تحتاج إلى عرض جميع العمليات الجارية لاسم مستخدم معيّن. تقدّم الأمر top مفتاح u لعرض عمليات مستخدم محدد فقط. كما هو موضّح في المثال أدناه، يتم عرض معرّفات العملية (PIDs) التي تتطابق فقط مع معرّف المستخدم bkindle.

top -u bkindle
The top command displaying only processes for the user bkindle.

العثور على معرّفات العملية المحدّدة باستخدام أمر pgrep

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

على الرغم من أن ps يعرض معلومات أكثر، فإن pgrep مصمم لإعادة معرّفات العملية فقط. يساعد pgrep في العثور على العملية باستخدام العديد من معلمات البحث المتاحة. في المثال التالي، يُظهر pgrep البحث عن أي عملية تطابق vmtoolsd.

pgrep vmtoolsd
Using pgrep to obtain all PIDs associated with vmtoolsd.

بالمثل، حدد معرف المستخدم باستخدام التبديل u لاسترجاع عمليات مرتبطة فقط بهذا المستخدم المحدد. كما هو موضح أدناه، يتم إرجاع معرف واحد فقط للعملية vmtoolsd للمستخدم bkindle.

pgrep -u bkindle vmtoolsd
Retrieving the specific PID for the vmtoolsd process associated with the user bkindle.

البحث عن العمليات باستخدام Get-Process في PowerShell في نظام التشغيل Linux

تعمل الأوامر النموذجية لنظام Linux بشكل رائع، ولكن هل تعلم أن PowerShell قادر على إدارة عمليات Linux أيضًا؟ يعمل الأمر Get-Process بنفس طريقة عمل أمر ps في Linux ويعيد معلومات العملية. على سبيل المثال، ربما تحتاج إلى العثور على جميع العمليات الجارية التي يقوم بها المستخدم الحالي، bkindle. كما هو موضح أدناه، ابحث عن جميع معرفات العملية (التي يُعرف بـ “المعرف” بواسطة Get-Process) للمستخدم bkindle.

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'
Retrieving Linux PID’s with PowerShell’s Get-Process cmdlet.

ذات الصلة: كيفية استخدام Where-Object في PowerShell لتصفية كل الأشياء

بعد أن تعلمت كيفية تحديد مواقع العمليات المختلفة، تابع القراءة لاكتشاف جميع الطرق المتاحة لإنهاء أو قتل عملية في Linux!

قتل العمليات باستخدام أوامر القتل في Linux

في الأقسام السابقة، تعلمت كيفية تحديد معرف العملية التي تريد إرسال إشارة قتل إليها باستخدام أوامر Linux وPowerShell الأصلية. ستشرح الأقسام التالية كيفية استخدام برامج kill و pkill، والإشارات المرتبطة بها، والتبديلات في سطر الأوامر.

إشارات Linux وإدارة العمليات

الإشارات هي الطريقة التي يستخدمها نظام Linux للتواصل مع العمليات التي تعمل في نظام التشغيل. الإشارات الثلاث الأساسية التي يستخدمها أمر kill لإنهاء العمليات هي:

  • 1 (SIGHUP) – تنهي البرامج التفاعلية وتجعل السبايا (الخدمات الخلفية) تقرأ ملفات التكوين التي تستخدمها العملية.
  • 9 (SIGKILL) – تجبر العملية على الخروج دون القيام بمهام إغلاق متميزة.
  • 15 (SIGTERM) – تسمح للعملية بالانتهاء برفق، مثل إغلاق الملفات المفتوحة عند الانتهاء. هذه الإشارة الافتراضية المستخدمة عند عدم تحديد رقم عند استخدام أمر kill.

في حين أن هذا المقال يركز فقط على الإشارات الثلاث الرئيسية المستخدمة لإيقاف العمليات، هناك مجموعة من الإشارات المتاحة بإجمالي 64. استخدم kill -l للحصول على قائمة الإشارات وأرقامها المقابلة.

Great video on understanding process signals

الآن بعد أن فهمت الإشارات الثلاث الرئيسية المستخدمة في إنهاء العملية، تعلم كيفية قتل عملية في الأقسام التالية.

استخدام أمر kill لإنهاء عملية

في هذا المثال التالي، ستستخدم أمر kill. تخيل للحظة أنك تقوم بتشغيل مثيل PowerShell، يسمى pwsh، والمُعرّف برقم PID هو 22687. طريقة واحدة لإنهاء هذه العملية موضحة أدناه.

  1. استخدم pgrep pwsh لتحديد مُعرّف PID لعملية pwsh، المستخدم في أمر kill.
  2. Use kill -s TERM 22687 لإنهاء عملية pwsh بشكل سلس. يقوم أمر TERM بتعيين إشارة 15 (SIGTERM) ويُشير إليه باستخدام المعامل s في أمر kill.
  3. استخدم اختيارك من بين top، ps، أو pgrep للتحقق من أن رقم العملية (PID) لم يعد مدرجًا.

فيما يلي مثال على العملية أعلاه من خلال واجهة سطر الأوامر bash في Ubuntu 20.04 LTS.

Using kill and associated commands to terminate the pwsh process.

سيؤدي أمر killall إلى إنهاء جميع العمليات استنادًا إلى الاسم بدلاً من رقم العملية (PID)، وهو ما قد يجعل هذا الأمر مدمرًا إذا تم استخدامه بدون حذر. إذا اخترت استخدام هذا الأمر، استخدم خيار i لجعل الأمر يطلب التأكيد.

إنهاء العمليات بواسطة الاسم باستخدام pkill

قد لاحظت أن أمر kill يعمل فقط برقم العملية (PID). يمكن أن يجعل ذلك إنهاء العملية عملية معقدة تتكون من عدة خطوات. يقوم أمر pkill، الذي يتم تضمينه في حزم procps و procps-ng، بإنهاء عملية بناءً على اسم بحث.

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

أمر pkill غير متوفر، بشكل افتراضي، في Ubuntu 20.04 LTS. يجب عليك تنزيل وتثبيت التطبيق. للقيام بذلك، قم بتشغيل sudo apt install mcollective-plugins-process -y.

لإنهاء عملية باستخدام pkill، قم باتباع الخطوات التالية:

  1. استخدم ps للتحقق مما إذا كان تطبيق nano (محرر نصوص سطر الأوامر) قيد التشغيل حاليًا. هذه الخطوة اختيارية، ولكنها تشكل فحصًا للسلامة قبل إنهاء عملية.
  2. استخدم pkill -9 nano لإنهاء تطبيق nano بقوة.

فيما يلي مثال على العملية أعلاه من طرفية bash في Ubuntu 20.04 LTS.

Using the pkill command to forcefully terminate the nano process.

قتل عملية باستخدام أمر Top

عند تشغيل أمر top لعرض العمليات الجارية، يمكنك قتل عملية معينة باستخدام مفتاح k. سترى رسالة تفاعلية تطلب معرف العملية التي تريد قتلها.

كما هو موضح أدناه، قم بتشغيل أمر top واضغط k. أدخل معرف العملية التي تريد قتلها، واضغط على مفتاح Enter لإنهاء معرف العملية على الفور.

Use top to specify a process to terminate using the k keystroke.

بعد ذلك، تعلم طريقة بديلة أخرى للأوامر الأصلية في Linux باستخدام أمر PowerShell Stop-Process!

استخدام أمر PowerShell Stop-Process لإنهاء عملية

إذا لم تكن الأوامر الأصلية في Linux هي نمطك، فإن PowerShell لديها ما تحتاج إليه! تمامًا كما هو الحال مع أمر kill، يمكنك إنهاء العمليات باستخدام الأمر Stop-Process في Linux. مرة أخرى، تخيل أنك تقوم بتشغيل عملية PowerShell pwsh.

  1. ابحث عن معرف العملية باستخدام Get-Process -ProcessName 'pwsh' وقم بتسجيل معرفات العمليات لإنهائها.
  2. استخدم Stop-Process -Id 29992،30014 لإنهاء العمليات المتعددة المسترجعة.
  3. استخدم Get-Process -ProcessName 'pwsh' وتحقق من معرفات العمليات، 29992 و 30014 لم يعد مدرجين، مما يعني أنه تم إنهاؤها.

يمكنك أيضًا استخدام Get-Process وطريقة kill لإنهاء عملية واحدة أو متعددة: (Get-Process -Id [PID]).Kill() أو (Get-Process -Id [PID1,2,3,4]).Kill().

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

فيما يلي مثال على العملية أعلاه من محطة الطرفية bash على Ubuntu 20.04 LTS.

Using PowerShell, Stop-Process to kill processes in Linux.

الخطوات التالية

يجب أن تعرف الآن العديد من الطرق للعثور على العمليات وإنهائها في نظام التشغيل لينكس! لتحديك التالي، جرب إنهاء العمليات عن بُعد باستخدام اتصالات SSH أو عن طريق إنهاء العمليات التي قد تكون قيد التشغيل في حاويات.

ذات صلة: شخص من عالم ويندوز في عالم لينكس: إعداد SSH في لينكس

Source:
https://adamtheautomator.com/linux-kill-process/