النقاط الرئيسية
للعثور على معرف العملية لعملية Linux، استخدم الأمر pidof، مثل هذا: “pidof examplename”. إذا كنت تعرف جزءًا فقط من اسم معرف العملية، فيمكنك استخدام “pgrep examplenamefragment” بدلاً من ذلك. استبدل “examplename” و”examplenamefragment” بالمصطلحات التي تريد البحث عنها.
غالبًا ما يعني العمل مع عملية Linux معرفة معرف العملية، أو PID. وهو رقم فريد يُعطى لكل جزء من البرامج قيد التشغيل. وفيما يلي طريقتان لمعرفة ما هو.
ما هو معرف عملية Linux؟
داخليًا، يتتبع Linux عملية التشغيل من خلال تخصيص رقم تعريف فريد لها، يُسمى معرف العملية أو PID. كل تطبيق وأداة مساعدة وخادم قيد التشغيل لديه معرف عملية.
إن معرفات العملية هي قيم عددية بسيطة. وستتلقى العملية التي بدأت حديثًا معرف عملية أعلى بمقدار واحد من آخر معرف عملية تم إصداره. وبالتالي فإن العملية التي تحمل أعلى معرف عملية هي العملية الأحدث — أي الأحدث — التي تم إطلاقها. ويستمر هذا حتى يصل النظام إلى القيمة القصوى لمعرف العملية.
الحد الأقصى لمعرف العملية هو 32768. بمجرد الوصول إلى هذا الرقم، يعود Linux إلى البداية ويبحث عن معرف العملية الذي أصبح حرًا لأن العملية التي كانت تمتلكه سابقًا قد انتهت.
العملية ذات معرف العملية 1 هي العملية الأولى التي يتم تشغيلها عند تشغيل Linux بواسطة عمليات التمهيد. في الأنظمة المستندة إلى systemd، سيتم تشغيلها systemd
. في الأنظمة الأخرى من المرجح أن يكون init
على الرغم من أن بعض توزيعات Linux تستخدم بدائل مثل أوبن آر سي أو س6.
في بعض الأحيان يكون من المفيد اكتشاف معرف العملية (PID) الخاصة بعملية ما، وذلك عادةً لأنك تريد تنفيذ بعض الإجراءات على هذه العملية. فيما يلي طريقتان مختلفتان للعثور على معرف العملية (PID) الخاصة بعملية ما عندما تعرف اسم العملية.
كيفية الحصول على معرف عملية Linux باستخدام الأمر pidof
ال pidof
يمكن اعتبار الأمر مزيجًا من “PID” و”of”. الأمر أشبه بالسؤال عن معرف العملية لهذه العملية؟ إذا استخدمنا الأمر بدون معلمات، فلن يفعل أي شيء. سيعيدك بصمت إلى موجه الأوامر. نحتاج إلى تحديد اسم العملية.
pidof bash
pidof
يخبرنا أن معرف عملية غلاف Bash هو 8304. يمكننا التحقق من ذلك باستخدام ps
الأمر. كل ما علينا فعله هو الاتصال ps
بدون أي معلمات. سيعرض تقريرًا عن العمليات التي يتم تشغيلها في الجلسة الحالية.
ps
لأن ps
يقدم تقارير عن جميع العمليات التي يمكنه العثور عليها، والتي ستشمل نفسه، ويخبرنا بوجود bash
عملية و ps
عملية التشغيل. وكما نتوقع، bash
العملية لها نفس معرف العملية pidof
تم الإبلاغ عن ذلك.
إذا كان لديك أكثر من نافذة طرفية مفتوحة، pidof
سأقدم تقريرا عنهم جميعا.
pidof bash
لاحظ أن معرفات العمليات مدرجة من الأعلى إلى الأدنى، أو بعبارة أخرى، من الأحدث إلى الأقدم.
ما لا يظهره هذا هو أنك قد لا تكون المالك لجميع هذه العمليات. pidof
يجد جميع العمليات التي تحمل أسماء متطابقة، بغض النظر عن مالكها. دعنا ننظر بشكل أعمق من خلال توجيه الإخراج إلى grep
نحن نستخدم -e
(حدد جميع العمليات) و -f
(القائمة الكاملة) الخيارات مع ps
.
ps -ef | grep bash
اثنتان من عمليات bash تنتمي إلى المستخدم dave، والثالثة تنتمي إلى المستخدم mary.
في بعض الأحيان، يقوم تطبيق واحد بإنشاء العديد من العمليات، ولكل منها معرف عملية خاص بها. وهذا ما نحصل عليه مع Google Chrome.
pidof chrome
افتراضيا، pidof
التقارير عن كافة العمليات. إذا أردنا، يمكننا أن نطلب فقط أحدث تلك العمليات. -s
يؤدي خيار (لقطة واحدة) هذا الأمر فقط.
pidof -s chrome
لاستخدام kill
أمر لقتل جميع العناصر يدويًا chrome
ستكون العمليات مرهقة. إذا قمنا بجمع قائمة العمليات في متغير، فيمكننا تمرير هذا المتغير إلى kill
الأمر. kill
يمكن للأمر قبول معرفات PID متعددة في أمره، وبالتالي فإنه يقبل مدخلاتنا بكل سرور ويقتل جميع العمليات نيابة عنا.
pid=$(pidof chrome)
echo $pid
kill $pid
pidof chrome
يقوم الأمر الأول بجمع الناتج من pidof
ويعينها إلى متغيرنا، والذي نسميه pid
.نحن لسنا بحاجة إلى echo
نعرضه على الشاشة، ونحن نفعل ذلك فقط لإظهار ما يحتويه متغيرنا.
نمرر المتغير إلى kill
الأمر، ثم استخدم pidof
مرة أخرى للتحقق مما إذا كانت هناك أي عمليات Chrome متبقية. لقد تم قتلها جميعًا.
غرابة واحدة من pidof
إنه لن يعيد معرف عملية البرنامج النصي shell. إنه يعيد معرف عملية البرنامج النصي shell. bash
shell الذي يقوم بتشغيل البرنامج النصي. لرؤية shell الذي يقوم بتشغيل البرنامج النصي، نحتاج إلى استخدام -x
خيار (البرامج النصية).
pidof -x sleep-loop.sh
ps -e | grep bash
pidof
يعيد معرف العملية الخاص بـ bash shell، و ps
يُظهر لنا أن هناك قذيفتين تعملان. إحداهما هي القذيفة التي تعمل pidof
الأمر، والآخر هو الغلاف الذي يقوم بتشغيل البرنامج النصي.
كيفية العثور على معرفات العمليات باستخدام الأمر pgrep في Linux
ال pgrep
الأمر يعمل قليلا مثل pidof
في الحصول على معرفات العمليات في Linux. ومع ذلك، فهو لا يعثر فقط على العمليات التي تتطابق تمامًا مع تلميح البحث، بل يعيد أيضًا معرفات العمليات لأي عمليات يحتوي اسمها على نص البحث.
فيما يلي مثال على جهاز كمبيوتر يعمل عليه برنامج Firefox.
pgrep firefox
pgrep fire
pgrep fox
pgrep refo
تعمل كل هذه الأوامر على العثور على عملية Firefox وإرجاع معرف العملية. ولكن إذا أدخلت الأمر:
pgrep refo
بمفرده، كيف يمكنك أن تعرف ما إذا كان pgrep قد وجد Fiإعادة التدويرx وليس، على سبيل المثال، شيطان يسمى pإصلاحدكتوراه؟
إذا قمت بإضافة -l
عند استخدام خيار (اسم القائمة)، سيقوم pgrep بإدراج اسم العملية إلى جانب معرف العملية.
pgrep refo -l
إذا كان هناك حالات متعددة لعملية المطابقة، فسيتم إدراجها جميعًا.
pgrep bash
لاحظ أنه تم إدراجها بترتيب تصاعدي، وهو الترتيب المعاكس للإخراج من pidof
. يتم سردها من أقدم عملية إلى أحدث عملية. كما رأينا مع pidof
لا تخصك جميع العمليات المذكورة بالضرورة.
ال -u
يتيح لك خيار (معرف المستخدم) البحث عن العمليات التي تطابق نص البحث، والتي يملكها المستخدم المحدد.
pgrep bash -u dave
هذه المرة نرى ثلاث عمليات bash في النتائج. يتم استخدام العملية الأخرى بواسطة mary
.
pgrep bash -u mary
يمكننا ربط أسماء المستخدمين معًا في قائمة مفصولة بفاصلة.
pgrep bash -u dave,mary -l
ويمكننا أن نطلب رؤية كافة العمليات لمستخدم معين.
pgrep -u dave -l
لرؤية سطر الأوامر بالكامل، استخدم -a
(القائمة الكاملة) الخيار.
pgrep -u dave -a
كلمة عن ملكية PID
لا يمتلك المستخدم الجذر جميع عمليات النظام. بالطبع يمتلك العديد منها، ولكن ليس كلها. على سبيل المثال، يعمل هذا الأمر:
pgrep avahi-daemon
ولكن هذا الأمر يفشل.
pgrep -u root avahi-daemon
إنه يفشل لأنه root
لا يمتلك هذه العملية. المالك الفعلي هو مستخدم النظام المسمى “avahi”. باستخدام اسم المستخدم الصحيح، يعمل الأمر.
pgrep -u avahi avahi-daemon
إنه أمر صغير يجب الحذر منه.