كيف تقتل عملية لينكس. المحاولة رقم 1 حل بسيط

09.11.2020

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

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

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

عند العمل مع Ubuntu Linux ، ربما تكون لديك أسئلة بالفعل:

كيفية تحديد PID لقتل العملية / التطبيق لاحقًا

إذا كنت لا تريد تشغيل الأمر أعلىأو نظير آخر أكثر قوة htop، ثم تزعج نفسك بالبحث عن معرّف هذا المعرف أو ذاك للعملية ، فهناك طريقة أسهل للخروج / حل للعثور PIDالعملية ، يمكنك استخدام الأمر " بيدوف" أو " ملاحظة".

لنفترض أننا بحاجة إلى معرفة معرّف عملية التقديم جوجل كرومماذا نفعل في هذه الحالة ، افتح الطرفية Ctrl + Alt + T وقم بتنفيذ الأمر في الجهاز:

بيدوف كروم

نحصل على الإخراج:

9497 9183 9123 8815 8788 6042 6033 5938 5916 5911 5908 5900 5892 5836 5831 5819

جاهز تقريبًا ، لقد حددنا PID ، اقرأ عن كيفية قتل العملية أدناه.

كيف تقتل عملية في Linux بواسطة PID

لقد حددنا PID في التطبيق الذي نريد القضاء عليه ، مما سبق ، يمكنك أن ترى أن لدي الكثير من علامات التبويب التي تعمل في المتصفح الآن بالإضافة إلى عمليات متصفح منفصلة ، ونتيجة لذلك ، 16 idi ، لقتلهم جميعًا ، نحن قم بتشغيل الأمر:

سودو قتل 9497 9183 9123 8815 8788 6042 6033 5938 5916 5911 5908 5900 5892 5836 5831 5819

يمكنك أيضًا عرض جميع العمليات النشطة في النظام عن طريق تشغيل الأمر:

سودو ps axu

نعم تماما مثل ذلك. بدلاً من Chrome ، يمكن أن يكون هناك أي تطبيق آخر أو سكايب أو أي شيء آخر.

يمكنك أيضًا استخدام أمر إضافي لاكتشاف معرّف العملية للتطبيق الذي تريد القضاء عليه:

فرع فلسطين - أ | grep -i name-app

بدلاً من تطبيق الاسم ، نكتب اسم التطبيق ، ولا تدخل الاسم بالكامل يدويًا ، واستخدم الاكتشاف التلقائي باستخدام المفاتيح " التبويب". ونتيجة لذلك ، سيعرض هذا الأمر وقت تشغيل العملية المطلوبة ، وبالتالي ، PIDالتي يمكنك استخدامها للقتل ، فلنختبر الأمر عن طريق تنفيذه في المحطة:

فرع فلسطين - أ | grep -i سكايب

نحصل على النتيجة التالية:

9257؟ 00:00:57 سكايب

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

كيفية استخدام أمر Kill في Linux

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

لقد حصلنا عليه ويمكننا الآن إنهاء التطبيق:

سودو قتل 9257

هذا كل شيء ، تم إنهاء التطبيق.

كيف تقتل عملية في Linux بالاسم

لقتل عملية بالاسم ، يمكنك استخدام الأمر killall ، يجب أن تفهم أولاً أن هذا الأمر يقتل جميع العمليات التي لها نفس الاسم. هذا مناسب للغاية ، لأننا في هذه الحالة لا نحتاج إلى البحث عن PID للعملية التي نحتاجها ، على سبيل المثال ، نريد الإغلاق تطبيق سكايب، قم بتنفيذ الأمر في الجهاز:

سودو كيلال سكايب

نفس الخيار:

سودو killall -s 9 سكايب

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

أمر الموت ، والذي لا ينبغي القيام به في المحطة

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

دعني أعطيك مثالاً على أمر الموت:

سودو كيل -9 -1

سيقتل هذا الأمر جميع العمليات الجارية حاليًا. لا أنصحك بتنفيذها ، لأن العواقب قد تكون غير متوقعة وعلى الأرجح ستضطر إلى إعادة تشغيل النظام بدون واجهة رسومية. في حالة فشل الواجهة الرسومية فجأة ، افتح الجهاز باستخدام الأوامر CTRL + ALT + F1، يتم فتح كل نافذة جديدة بنفس القياس ، فهي ببساطة تغير F1 إلى F2 وهكذا.

يمكنك أيضًا الحصول على المساعدة بشأن الأوامر التي تم استخدامها أعلاه ، من خلال المحطة ، عن طريق تشغيل الأوامر:

رجل ps man grep man pidof man kill man killall

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

كن على هذا النحو ، ولكن بعض التطبيقات في لينكستجمد في بعض الأحيان. في هذه الحالة ، هناك مواقف لا يستجيب فيها التطبيق على الإطلاق ، أو يعمل ببطء شديد بحيث لا يمكن إنهاء عمله بشكل صحيح. للخروج بسرعة من الموقف الناتج ، يمكنك "قتل" هذه العملية. لهذا ، يتم استخدام الأوامر قتلو اقتل الكل... سنكتشف الآن كيفية استخدام هذه الأوامر ، والعثور على PID للعملية ، وإرسال إشارة SIGKILL.

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

تحديد معرف العملية (PID) لعملية - الأمر pidof

PID- معرّف فريد للعملية في النظام لينكس... لإيقاف العملية بشكل صحيح ، يجب عليك أولاً تحديد معرف المنتج. يتم استخدام الأمرين ps و grep لهذا الغرض. بالمقابل الأمر psالغرض منه هو عرض قائمة العمليات النشطة في النظام ومعلومات عنها. أمر Grepيعمل في نفس وقت تشغيل ps (في أنبوب) وسيبحث في نتائج الأمر ps. يمكنك عرض قائمة بجميع العمليات من خلال التنفيذ في سطر الأوامر:

بالطبع ، يمكن أيضًا تحديد PID عبر أعلى... ولكن في معظم الحالات ، يكون عدد العمليات كبيرًا جدًا (ويتغير ديناميكيًا في الأعلى) ، لذلك ليس من السهل تحديد PID بسرعة وبشكل صحيح. هذا هو المكان الذي يتم فيه استخدام الأمر grep. على سبيل المثال ، لإكمال العملية متصفح جوجليحتاج Chrome إلى تشغيل الأمر التالي:

ps axu | الكروم grep

$ ps axu | الكروم grep
itechf2 20474 2.7 1.5 938416 120136 tty2 Sl + 11:07 0:00 / opt / google / chrome / chrome

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

pidof كروم
20728 20706 20668 20647 20586 20574 20553 20508 20474

إنهاء العملية في Linux - أوامر القتل والقتل

قم بإنهاء العملية في نظام التشغيل لينكسبمعرفة PID الخاص به ، يمكنك استخدام الأمر قتل... الأمر يستحق المعرفة والفهم: أمر القتل مصمم لإرسال إشارة إلى عملية ما. بشكل افتراضي ، إذا لم نحدد الإشارة المراد إرسالها ، يتم إرسال إشارة SIGTERM (من إنهاء الكلمة). يشير SIGTERM إلى عملية الإنهاء. كل إشارة لها رقمها الخاص. SIGTERM مرقمة 15. يمكن عرض قائمة بجميع الإشارات (وأرقامها) التي يمكن لأمر القتل أن يرسلها عن طريق التشغيل قتل -l ... لإرسال إشارة SIGKILL (رقم 9) لمعالجة 2811 ، قم بتشغيل سطر الأوامر:

في الوقت نفسه ، قد لا توقف إشارة SIGTERM العملية (على سبيل المثال ، عند اعتراض الإشارة أو حظرها) ، بينما تقتل SIGKILL العملية دائمًا ، حيث لا يمكن اعتراضها أو تجاهلها.

أمر Killallفي Linux ، تم تصميمه "لقتل" جميع العمليات التي تحمل الاسم نفسه. هذا مناسب لأننا لسنا بحاجة إلى معرفة معرف العملية (PID). على سبيل المثال ، نريد إغلاق جميع العمليات المسماة chrome. تشغيل في المحطة:

يرسل الأمر killall ، مثل kill ، إشارة SIGTERM افتراضيًا. لإرسال إشارة أخرى ، تحتاج إلى استخدام الخيار ... على سبيل المثال:

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

أمر قتليمكن استخدامها لقتل أو إنهاء عملية باستخدام "Signal" أو "PID". يرسل الأمر Kill الإشارة المحددة لإنهاء تطبيق سوء التصرف. إذا لم يتم تحديد إشارة ، يتم إرسال إشارة TERM. ستقتل إشارة TERM هذه العمليات التي لا تلتقطها ؛ بالنسبة للعمليات الأخرى ، قد يكون من الضروري استخدام إشارة القتل (رقم 9) ، حيث لا يمكن اعتراض هذه الإشارة.

SIGTERM هي إشارة تطلب إيقاف العملية. يتم إعطاء هذه العملية بعض الوقت لإكمال عملها.

حسنًا ، بمساعدة إشارة SIGKILL ، يمكننا إجبار العملية على الإنهاء على الفور. ولا يحق للبرنامج تجاهل هذه الإشارة ، ويقوم بإنهاء التطبيق.

ما يلي هو تنسيق أمر القتل:

قتل [-إشارة | -s إشارة] pid ...

أسهل طريقة لقتل عملية هي العثور على PID الخاص بالمورد ثم تشغيل PID كوسيطة باستخدام أمر Kill.

ما هو PID؟

يتم تلقائيًا تعيين رقم تعريف عملية فريد (PID) لكل عملية أو برنامج Linux أو Unix يتم تنفيذه. يقوم PID تلقائيًا بتعيين رقم لكل عملية في النظام.

يمكنك العثور على PID لمورد باستخدام الأمر "pidof" أو الأمر "ps". لمعرفة معرف العملية (على سبيل المثال Firefox) ، استخدم الأمر التالي

بيدوف فايرفوكس

يمكنك أيضًا استخدام الأمر بشكل مختلف:

فرع فلسطين - أ | grep -i Firefox

في المثال أعلاه ، يتم عرض الرقم "23814" وهو PID لعملية فايرفوكس. بمجرد معرفة PID للعملية (Firefox) ، يمكنك استخدام أمر Kill لقتل العملية (Firefox) كما هو موضح أدناه.

اقتل 23814

عندما ينفذ الأمر التدمير ، أي أنه يرسل إشارة إلى العملية التي يتم تمرير PID الخاص بها مع الأمر كوسيطة.

لكي تكون أكثر تحديدًا ، يحتوي أمر Kill على الأشكال التالية:

  • قتل PID
  • قتل -15 PID
  • قتل -9 PID
  • قتل -SIGTERM PID
  • قتل -SIGTERM PID

يحتوي أمر Kill على رموز الإرجاع التالية:

  • 0 - عند النجاح
  • 1 - الفشل
  • 64 - نجاح جزئي (إذا تم تحديد أكثر من عملية واحدة)

أمر آخر يمكنك استخدامه هو اقتل الكل... يستخدم Killall أيضًا اسم العملية بدلاً من PID ويقتل جميع مثيلات العملية بهذا الاسم. على سبيل المثال ، إذا بدأت مثيلات متعددة من Firefox ، فيمكنك إنهاء كل منهم باستخدام الأمر

Killall Firefox

بالنسبة لخادم X ، هناك أمر آخر يسمى اكس كيلالتي يمكن أن تقتل العمليات. أمر Xkill مخصص للوضع الرسومي ، دون المرور باسم العملية أو PID ، أي إذا كنت تعمل في محطة طرفية

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

في هذه المقالة ، سنتعرف على بعض الطرق الأكثر شيوعًا لإنهاء عملية Linux. دعونا نصف بالتفصيل كيف تتوقف العملية وكيف نفعل كل شيء بشكل صحيح.

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

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

  • توقع- إشارة الإكمال الأكثر ضررًا ، تعني مقاطعة. يتم إرساله إلى عملية تم إطلاقها من الجهاز باستخدام اختصار لوحة المفاتيح Ctrl + C. تكمل العملية جميع إجراءاتها بشكل صحيح وتعيد التحكم ؛
  • التوقيع -هذه إشارة أخرى يتم إرسالها باستخدام اختصار لوحة المفاتيح إلى برنامج يعمل في محطة طرفية. يخبرها بالخروج ويمكن للبرنامج إكمال برشاقة أو تجاهل الإشارة. على عكس السابق ، فإنه ينشئ تفريغ ذاكرة. مفاتيح الاختصار Ctrl + / ؛
  • تنفس الصعداء حتى- يُعلم العملية بأن الاتصال بمحطة التحكم مقطوع ، ويتم إرساله بشكل أساسي بواسطة النظام عند انقطاع الاتصال بالإنترنت ؛
  • سيغرم- إنهاء العملية فورًا ، ولكن تتم معالجتها بواسطة البرنامج ، وبالتالي ، يسمح لها بإنهاء العمليات الفرعية وتحرير جميع الموارد ؛
  • سيكيل- ينهي العملية أيضًا على الفور ، ولكن بخلاف الإصدار السابق ، لا يتم نقلها إلى العملية نفسها ، ولكن تتم معالجتها بواسطة النواة. لذلك ، تظل العمليات التابعة والموارد قيد التشغيل.

من المهم أن تفهم أنك بحاجة للسماح للعملية بالإكمال بشكل صحيح. من المرغوب فيه تحرير المنافذ والمآخذ وإغلاقها وحذف الملفات المؤقتة. لذلك ، لا ترسل SIGKILL على الفور. أرسل إشارات الإنجاز بالتسلسل كما هو مذكور أعلاه.

في البدايه Ctrl + C، إذا كان ذلك ممكنًا ، ثم SIGTERM - على الرغم من أنها تنهي العملية ، إلا أنها تفعل ذلك ثقافيًا ، وكملاذ أخير فقط SIGKILL. الآن دعونا نلقي نظرة على كيفية قتل عملية باستخدام pid Linux في الممارسة العملية. إذا كنت تستخدم SIGKILL دائمًا ، فإن هذه الصورة تتبادر إلى الذهن:

كيف أقتل عملية لينكس؟

يستخدم Linux الأداة المساعدة kill لإرسال إشارات إلى العمليات. تركيبها بسيط للغاية:

kill -signal من process_pid دولار

الإشارة هي إحدى الإشارات المذكورة أعلاه لإكمال العملية. بشكل افتراضي ، إذا لم يتم تحديد هذه المعلمة ، يتم استخدام إشارة SIGTERM ، وهي صحيحة للغاية. نحتاج أيضًا إلى تحديد العملية التي يجب إكمالها. لهذا ، يتم استخدام معرف عملية فريد - PID.

لنفترض أننا نقوم بتشغيل الأداة المساعدة ping. نريد إنهاءه بالقتل. بعد ذلك ، نكتشف أولاً معرفه باستخدام الأمر ps:

ps aux | grep بينغ

يعرض السطر الأول أداة ping نفسها ، بينما يعرض السطر الثاني برنامج ps نفسه. نأخذ PID المطلوب وننهي العملية باستخدام SIGTERM:

قتل - TERM 20446

وفقط إذا استمرت العملية في التعطل بعد هذا الأمر ، ويمكنك التحقق من ذلك عن طريق تشغيل ps. الآن فقط يمكنك تنفيذ SIGKILL:

اقتل اقتل 20446

الآن نتحقق مرة أخرى:

إذا كانت العملية تعمل كمستخدم متميز ، فأنت بحاجة بالطبع إلى استخدام sudo. ليس من الملائم دائمًا قتل عملية من خلال PID الخاص بها ، على الأقل ، لأنك ما زلت بحاجة إلى معرفة PID. يمكننا تجميع التركيبات المعقدة باستخدام xargs لحساب pid تلقائيًا من اسم العملية وإنهائه على الفور ، لكن هذا ليس ضروريًا. المرافق الخاصة موجودة بالفعل.

كيفية إنهاء العملية مع pkill

الأداة المساعدة pkill عبارة عن غلاف للقتل ، وهي تتصرف بنفس الطريقة تمامًا ولها نفس الصيغة ، باستثناء أنها تحتاج إلى تمرير اسم العملية كمعرف العملية. تفحص الأداة دليل proc وتبحث عن معرف العملية الأولى بهذا الاسم ، ثم ترسل SIGTERM إليه. بهذه الطريقة يمكنك قتل العملية المسماة Linux. على سبيل المثال ، إذا أردنا إنهاء نفس الأمر ping:

يمكنك أيضًا ضبط نوع الإشارة يدويًا:

pkill -TTERM بينغ

بدلاً من ps ، يمكنك استخدام الأداة المساعدة pgrep للعثور على معرف العملية ، مع التأكد من انتهاء برنامجنا:

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

كيف توقف العملية مع Killall

يعمل killall بطريقة مشابهة للأداة المساعدة السابقة. يأخذ أيضًا اسم العملية كمعامل ويبحث عن PID في دليل / proc. لكن هذه الأداة ستكتشف جميع العمليات التي تحمل هذا الاسم وتنهيها. على سبيل المثال:

كما ترى ، هناك العديد من العمليات قيد التشغيل ، يبقى إيقاف عملية Linux مع killall:

سينهي الأمر جميع أدوات ping المساعدة قيد التشغيل ، ويمكنك التحقق من ذلك عن طريق تشغيل pgrep مرة أخرى:

الاستنتاجات

في هذه المقالة ، قمنا بتغطية كيفية قتل عملية Linux. يمكن أن تكون هذه المهمة مفيدة جدًا في بعض الأحيان ، ولكن من المهم أن نفهم أنها تحتاج إلى القيام بها بشكل صحيح. هذا لا يعني أن تمرير SIGKILL بدلاً من SIGTERM أمر خطير للغاية ، لكن لا يجب عليك ذلك. آمل أن تكون هذه المعلومات مفيدة لك.