سنوضح لك كيفية إنهاء عملية في Linux. إحدى المزايا الرئيسية لنظام Linux هي القدرة على إنهاء العملية دون الحاجة إلى إعادة تشغيل الخادم. في هذه المقالة، سنوضح لك كيفية إيقاف عملية في Linux باستخدام أوامر القتل، pkill وkillall.
قبل أن نبدأ، نحتاج إلى معرفة ما هو معرف العملية (PID).
يمثل PID التعريف الرقمي للعملية في . كل عملية لها PID فريد. في الواقع، على سبيل المثال، العملية الأولى التي تبدأ على نظام يستند إلى Linux هي عملية ويتم تعيين PID الخاص بها على 1. هذه العملية هي الأصل لجميع العمليات الأخرى. لا يمكن قتل عملية init باستخدام أوامر القتل، وهذا يضمن عدم قتلها عن طريق الخطأ.
الآن، من أجل العثور على PID لكل عملية قيد التشغيل على الخادم، يمكننا تشغيل الأمر التالي:
وهذا يعطينا قائمة بجميع العمليات الجارية ومعرفات PID المقابلة لها.
إذا أردنا العثور على PID لعملية معينة، فيمكننا استخدام الأمر pidof متبوعًا باسم العملية. على سبيل المثال، لمعرفة معرّف عملية MySQL، يمكنك تشغيل الأمر التالي:
بيدوف الخلية
للحصول على معلومات أكثر تفصيلا، يمكننا استخدام الأمر ملاحظة auxجنبا إلى جنب مع grep:
بي اس اوكس | grep mysql
الآن بعد أن عرفنا ما هو PID وكيفية العثور على PID لعملية معينة، يمكننا الانتقال إلى القسم التالي ومعرفة كيفية إيقافه.
هناك بعض القواعد المهمة التي نحتاج إلى معرفتها قبل البدء في استخدام أمر القتل.
عندما ننهي عملية ما باستخدام أمر kill، فإننا في الواقع نرسل إشارة PID المحددة التي نريد إيقافها. يتم استخدام الإشارات التالية بواسطة أمر القتل:
1 = اغلق الخط 9 = اقتل 15 = انهاء المكالمة
نادراً ما يتم استخدام الإشارة المعلقة. في أغلب الأحيان نستخدم إشارة القتل، وإذا لم تعمل فيمكننا استخدام إشارة الإنهاء.
لذلك بمجرد العثور على معرف العملية (PID) للعملية التي نريد إيقافها، استخدم إحدى الطرق التي وصفناها سابقًا، يمكننا استخدام الأمر قتل -9 PIDلقتل العملية من ذلك PID المحدد.
على سبيل المثال، إذا كان PID هو 6738، فيمكننا استخدام الأمر التالي:
قتل -9 6738
إذا كنت تريد استخدام اسم العملية بدلاً من معرف PID الخاص بها لإيقافها، فيمكنك استخدام الأمر pkill. على سبيل المثال، إذا كانت العملية التي نريد إيقافها تسمى , فيمكننا استخدام الأمر التالي لإيقافها:
بي كيل ماي اس كيو ال
اثنين الأوامر السابقةتستخدم لقتل عملية واحدة محددة فقط. ولكن، إذا أردنا إنهاء عملية ما مع جميع عملياتها الفرعية، فيمكننا استخدام الأمر killall:
قتل الخلية
في هذا المثال، سنوقف عملية MySQL وجميع العمليات التابعة لها.
إنها الأمثلة الأكثر شيوعًا لقتل العمليات في Linux.
تخيل: تقوم بتشغيل برنامج، والعمل معه، وبعد فترة من الوقت يتوقف عن الاستجابة ويتجمد. من المستحيل إعادة تشغيل التطبيق نظرًا لأن مثيله لا يزال معلقًا في ذاكرة الكمبيوتر. ماذا تفعل في هذه الحالة؟ أولا وقبل كل شيء، تحتاج إلى إنهاء البرنامج وإزالة العملية من الذاكرة.
أبسط و طريقة عالميةقتل عملية في Linux يستخدم الأوامر الطرفية. سيعمل هذا الخيار على أي توزيعة لينكس.
في غرفة العمليات نظام لينكسعادة ما تسمى العملية برنامج التشغيلأو التطبيق. يمكن أيضًا تسمية العملية بأية مهمة قيد التشغيل حاليًا السيطرة على لينكس. يمكن لأي عملية قيد التشغيل إطلاق عملية فرعية.
تتمتع جميع العمليات التي تعمل على Linux بالسمات التالية:
كل عملية قيد التشغيل تكون في إحدى الحالات:
قبل قتل عملية ما في Linux، يجب عليك أولاً العثور عليها. الأمران الأكثر استخدامًا لهذا الغرض في Linux هما top وps.
يظهر الأمر العلوي القائمة الكاملةالعمليات الحالية. بالإضافة إلى ذلك، تحتوي القائمة على الكثير من المعلومات المفيدة حول كل منها عملية التشغيل، على سبيل المثال:
يتم عرض المعلومات المقدمة بواسطة الأمر العلوي مرتبة حسب مستوى وقت وحدة المعالجة المركزية المستخدمة (عمود %CPU). يمكن للمستخدم تغيير ترتيب الفرز:
يمكن أن يوفر الأمر العلوي الكثير من المعلومات المفيدة، لكنه ليس الأكثر طريقة مريحةالحصول على المعلومات اللازمة حول العملية التي تحتاجها. لتجنب البحث عن العملية التي تحتاجها، يمكنك استخدام الأمر ps وتصفية القائمة باستخدام الأمر grep. على سبيل المثال، إذا كنت تريد العثور على جميع العمليات المرتبطة بالتشغيل متصفح اوبرايمكنك إدخال الأمر ps axu | grep موزيلا.
يحتوي الأمر ps على الخيارات التالية:
باستخدام مزيج من أوامر ps وgrep، يمكنك الحصول على جميع المعلومات التي تحتاجها لتدمير التطبيق المجمد.
للعثور على معرف عملية ما باسمها، يوجد الأمر pidof. تنسيق استخدامه كما يلي: pidof+اسم البرنامج. على سبيل المثال، للعثور على جميع معرفات PID المتعلقة ببرنامج Opera، يمكنك إدخال: pidof Opera.
في بعض الحالات، يحدث أن البرنامج قد أكمل تنفيذه، ولكن لم يتم إصداره منفذ الشبكة. للحصول على المعلومات اذهب الى في هذه الحالةتحتاج إلى إدخال أمر المصهر: fuser -vn tcp 80. حيث 80 هو رقم المنفذ العالق. بعد ذلك يمكنك القتل عملية لينكسعن طريق الميناء.
بمجرد اكتشاف معرف العملية (PID) للعملية واسمها، يمكنك متابعة عملية الإنهاء تطبيق غير ضروري. للقيام بذلك، يتم استخدام أمرين: kill - kill a Operation by id في Linux وkillall - إنهاء تنفيذ البرنامج بالاسم.
هيكل أمر القتل: اقتل SIGNAL PID. حيث SIGNAL هي الإشارة التي سيتم إرسالها وPID هو معرف العملية.
معلمة SIGNAL لإنهاء العملية هي 9 (SIGKILL). وبالتالي، من أجل إنهاء عملية بواسطة pid في Linux، تحتاج إلى إدخال الأمر في وحدة التحكم: kill -9 9578. حيث 9578 هو رقم العملية الفريد.
أمر إنهاء العملية ليس هو الأمر الوحيد الذي يمكن إرساله باستخدامه تطبيق النظامقتل. يمكنك الحصول على قائمة بجميع الأوامر التي يمكن إرسالها إلى أمر باستخدام kill عن طريق كتابة kill -l.
ومن المفيد أيضًا معرفة القيم الأخرى التي يمكن أن تتخذها معلمة SIGNAL. على سبيل المثال، يمكنك استخدام معلمة HUP لإعادة تشغيل برنامج مجمد. لا تقاطع إشارة SIGTERM البرنامج على الفور، ولكنها تمنح وقتًا لإيقاف التشغيل بسلاسة، أي أن التطبيق يحفظ البيانات، ويكمل تنفيذه، ويحرر جميع الموارد المشغولة.
إذا كنت تعرف اسم البرنامج الذي تريد إيقافه، فيمكنك استخدام أمر killall. على سبيل المثال، لقتل جميع العمليات المتعلقة بتطبيق Opera، تحتاج إلى إدخال الأمر: killall -9 Opera.
ومع ذلك، لا يؤدي هذا الأمر دائمًا إلى إنهاء العمليات المتعلقة بالبرنامج الذي يتم تدميره. إذا قمت بإدخال ps aux | بعد تشغيل الأمر أعلاه grep Opera وسترى أن بعض العمليات لا تزال قيد التشغيل، فمن الأفضل إيقافها باستخدام تطبيق قتل النظام.
في بعض الحالات، من أجل إيقاف عملية يجريها مستخدم آخر على نظام التشغيل Linux، قد تحتاج إلى القيام بذلك حقوق الجذر. ثم قبل الأمر بإنهاء العملية، تحتاج إلى إدخال أمر Sudo.
هذه هي كل المعلومات التي يحتاجها المستخدم لإدارة العمليات. صحيح أن هذا الموضوع ليس سهلا للمبتدئين، ولكن من الضروري إتقانه، حيث يتم تنفيذ جميع إجراءات نظام التشغيل باستخدام العمليات. لتتعلم كيفية التحكم فيها، عليك أن تتدرب قليلاً.
نعني بالعملية نسخة من البرنامج الذي يعمل على النظام. على سبيل المثال، إذا كان لديك ثلاث نوافذ للآلة الحاسبة مفتوحة (على سبيل المثال gcalctool)، فهذا يعني أن لديك ثلاث عمليات قيد التشغيل.
كل عملية في Linux لها معرف خاص بها يسمى PID. قبل إيقاف العملية، تحتاج إلى تحديد معرف المنتج (PID) الخاص بها. للقيام بذلك، سوف نستخدم الأمرين ps و grep. أمر ملاحظةتم تصميمه لعرض قائمة بالعمليات النشطة في النظام والمعلومات المتعلقة بها. أمر grepيعمل في وقت واحد مع ps (في القناة) وسيبحث في نتائج الأمر ps. يمكنك سرد جميع العمليات عن طريق التشغيل في سطر الأوامر:
ولكن، كقاعدة عامة، القائمة كبيرة جدًا وإيجاد العملية التي نريد "قتلها" ليس بالأمر السهل. هذا هو المكان الذي يأتي فيه أمر grep للإنقاذ. على سبيل المثال، للعثور على معلومات حول عملية تسمى gcalctool، قم بتشغيل الأمر:
ملاحظة: | grep gcalctool
سيقوم الأمر grep بالبحث في نتائج الأمر ps وسيتم طباعة الأسطر التي تحتوي على السلسلة (الكلمة) gcalctool فقط. هناك تفصيل واحد مثير للاهتمام هنا، على سبيل المثال، إذا لم يكن تطبيق gcalctool قيد التشغيل، فبعد التنفيذ ملاحظة: grep gcalctoolسوف تتلقى:
$ ملاحظة اكسو | grep gcalctool yuriy 25587 0.0 0.0 10636 884 نقطة/2 S + 10:20 0:00 grep --color=auto gcalctool
أي أننا حصلنا على عملية grep نفسها، حيث قمنا بتحديد كلمة gcalctool كمعلمة للأمر، ووجدنا grep نفسه في مخرج الأمر ملاحظة.
إذا كانت عملية gcalctool قيد التشغيل، فسنحصل على:
Yuriy@yuriy-NIX:~$ ps axu | grep gcalctool يوري 25609 7.6 0.4 500840 17964؟ Sl 10:20 0:00 gcalctool yuriy 25624 0.0 0.0 10640 884 نقطة/2 S + 10:21 0:00 grep --color=auto gcalctool
نحن هنا مهتمون بالسطر: " يوري 25609 7.6 0.4 500840 17964 ؟ SL 10:20 0:00 gcalctool" الرقم 25609 هو PID لعملية gcalctool.
هناك طريقة أخرى أسهل لمعرفة معرف العملية (PID) للعملية - هذه أمر بيدوف، والذي يأخذ اسم العملية كمعلمة ويخرج معرف المنتج (PID) الخاص به. مثال على تنفيذ الأمر pidof:
$ بيدوف جكالكتول 25609
عندما يتم معرفة معرف العملية (PID) لعملية ما، يمكننا إيقافها أمر القتل. يأخذ أمر القتل معرف العملية (PID) للعملية كمعلمة. على سبيل المثال، لننهي العملية رقم 25609:
قتل 25609
بشكل عام، يهدف أمر القتل إلى إرسال إشارة إلى العملية. افتراضيًا، إذا لم نحدد الإشارة التي سيتم إرسالها، فسيتم إرسال إشارة SIGTERM (من انتهاء الكلمة). يخبر SIGTERM العملية بالإنهاء. كل إشارة لها رقمها الخاص. SIGTERM مرقم 15. يمكن الحصول على قائمة بجميع الإشارات (وأرقامها) التي يمكن لأمر الإيقاف إرسالها عن طريق تشغيل اقتل -ل. لإرسال إشارة SIGKILL (مرقمة 9) لمعالجة 25609، قم بتشغيل سطر الأوامر:
قتل -9 25609
قد لا توقف إشارة SIGTERM العملية (على سبيل المثال، إذا تم اعتراض الإشارة أو حظرها)، ولكن SIGKILL دائمًا ما يقتل العملية، لأنه لا يمكن اعتراضها أو تجاهلها.
أمر Killallفي Linux تم تصميمه "لقتل" جميع العمليات التي تحمل الاسم نفسه. يعد هذا مناسبًا لأننا لا نحتاج إلى معرفة معرف العملية (PID) للعملية. على سبيل المثال، نريد إغلاق كافة العمليات المسماة gcalctool. تشغيل في المحطة:
Killall gcalctool
يرسل أمر killall، مثل kill، إشارة SIGTERM افتراضيًا. لإرسال إشارة أخرى تحتاج إلى استخدام الخيار -س. على سبيل المثال:
Killall -s 9 gcalctool
لا يمكن إيقاف بعض العمليات مستخدم عادي. على سبيل المثال، إذا تم تشغيل العملية كجذر أو كمستخدم آخر على النظام، فيجب تنفيذ أوامر kill و killall كمستخدم متميز، مع إضافة Sudo (في Ubuntu):
سودو قتل 123
هناك مواقف عندما تعمل في واجهة المستخدم الرسومية (مثل جنوم) ولا تتمكن من فتح المحاكي الطرفي لإيقاف العملية المعلقة. ثم يمكنك التبديل إلى وحدة التحكم الافتراضية باستخدام المفاتيح Ctrl+Alt+F1وقم بتسجيل الدخول إليه وتنفيذ الأوامر من هناك. ومن ثم العودة عن طريق النقر السيطرة + البديل + F7.
يمكن الحصول على المساعدة بشأن استخدام أي أمر باستخدام الأمر man:
رجل ملاحظة رجل grep رجل pidof رجل يقتل رجل Killall
مهما كان الأمر، فإننا نواجه عاجلاً أم آجلاً الحاجة إلى القضاء على الأخطاء أو العملية المعلقة لينكس. نعم، نعم، بعض التطبيقات في Linux تتجمد أحيانًا، على الرغم من استقرارها. في هذه الحالات ستكون الأداة المساعدة الرائعة مفيدة قتل. دعونا معرفة كيفية استخدام هذه الأداة المساعدة.
كل عملية في لينكسلديه معرف خاص به يسمى معرف المنتج. قبل إيقاف العملية، عليك تحديدها معرف المنتج. خلاصة القول هي أننا بحاجة إلى العثور على هذا المعرف، فلنفتح، على سبيل المثال، أي برنامج ونحاول العثور على معرفه.
للبحث نحتاج الأوامر ملاحظة و grep. فريق ملاحظة- ستظهر لنا قائمة بالعمليات النشطة في النظام ومعلومات عنها والأمر grep- سيتم البحث في نتائج الأمر ملاحظة. لذلك دعونا نفتح محطة ( السيطرة + البديل + ر) وإلقاء نظرة على العمليات النشطة
ملاحظة: اكسوكما لاحظتم بالفعل فإن القائمة كبيرة جدًا والتمرير فيها للعثور على العملية التي نحتاجها يعد مضيعة للوقت، ولهذا سنستخدم برنامجًا رائعًا grep. للعثور على العملية التي نحتاجها، بعد الدخول إلى grep، حدد التطبيق الذي نبحث عنه. باستخدام فايبر كمثال، يبدو الأمر كما يلي:
ملاحظة: viberبول 22685 0.0 1.9 647748 76620 ؟ Sl 13:01 0:04 /usr/bin/python /usr/bin/viberwrapper-indicator pol 22697 3.0 5.4 5402084 216120 ? Sl 13:01 4:52 /opt/viber/Viber pol 24068 0.0 0.0 17192 2216 نقطة/0 S + 15:41 0:00 grep --color=auto viberيحتوي السطر الأول على تطبيق viberwrapper-indicator الذي يمكنك القراءة عنه. الخط الثاني هو فايبر نفسه، والذي «سنطفئه» اليوم، لكن ما هو الخط الثالث؟ العملية الثالثة هي العملية نفسها grep، نظرًا لأننا حددنا كلمة viber كمعلمة بحث، ووجدنا grep نفسه في إخراج الأمر ملاحظة.
هناك طريقة أخرى أسهل لمعرفة ذلك معرف المنتجالعملية هي أمر com.pidof، والذي يأخذ اسم العملية كمعلمة ويخرج معرف المنتج (PID) الخاص به. كن حذرًا بشأن الحالة، إذا كان اسم العملية يبدأ بحرف كبير، وتكتبه بحرف صغير (أو العكس)، فلن يكون pidof موجودًا
بيدوف فايبركما لاحظت بالفعل، فقد حصلت على 3 أسطر مع تطبيق Viber النشط
الآن نحن نعرف معرف عملية Viber ولدينا الفرصة "لقتله":
قتل 22697بشكل عام، يهدف أمر القتل إلى إرسال إشارة إلى العملية. افتراضيًا، إذا لم نحدد أي سمات، فسيتم إرسال إشارة SIGTERM (من إنهاء الكلمة). يخبر SIGTERM العملية بالإنهاء. كل إشارة لها رقمها الخاص. SIGTERM مرقم 15. قائمة بجميع الإشارات (وأرقامها) التي يمكن للأمر إرسالها قتل، يمكن استخلاصها عن طريق التشغيل اقتل -ل. لإرسال إشارة SIGKILL (مرقمة 9) لمعالجة 22697، قم بتشغيل سطر الأوامر:
قتل -9 22697قد لا توقف إشارة SIGTERM العملية (على سبيل المثال، إذا تم اعتراض الإشارة أو حظرها)، ولكن SIGKILL دائمًا ما يقتل العملية، لأنه لا يمكن اعتراضها أو تجاهلها.
يمكنك عرض القائمة الكاملة للسمات عن طريق تشغيل الأمر
يجب استخدام الوسيطة -9 (أو KILL) لأمر القتل فقط على الأنظمة المتوافقة مع POSIX عند الضرورة القصوى. لماذا؟ لا يمكن معالجة إشارة KILL من خلال العملية. وهذا يعني أنه بعد قتل العملية باستخدام kill -9، ستبقى العمليات الفرعية في الذاكرة وتصبح "يتيمة" نظام الملفاتسيتم انسدادها بالملفات المؤقتة، وستكون شرائح الذاكرة المشتركة نشطة، وسيتم تعليق المقابس، ولن يتم تنفيذ وظيفة atexit(3) على الإطلاق. ونتيجة لذلك، هناك خطر مواجهة مشاكل غير متوقعة ويصعب تصحيحها.
بدلاً من ذلك، استخدم إشارة TERM الافتراضية، واقتل فقط إذا ثبت أن الإشارات الأقل إشكالية غير فعالة:
$قتل 6738
قتل $ -INT 6738
$ اقتل -HUP 6738
$ اقتل - اقتل 6738
إذا فشلت حتى إشارة KILL في إنهاء العملية، فمن المحتمل أن تكون العملية عالقة في الإدخال/الإخراج أو في حالة أخرى لا يمكن قتلها. قد تحتاج إلى إعادة التشغيل أو إلغاء تحميل محرك أقراص الشبكة المعطل بالقوة.
يعد استخدام القتل الافتراضي -KILL أمرًا مقبولًا عند التعامل مع تطبيق به مشكلات، على سبيل المثال، غالبًا ما يتم إنهاء الإصدارات الأقدم من Netscape فقط بإشارة KILL. ومع ذلك، يعد هذا استثناءً نادرًا للقاعدة: استخدم KILL لهذه التطبيقات المعروفة ولهم فقط.
تقوم إشارة HUP بتجميد القشرة، لذلك طريقة جيدةامسح الصدفة المعلقة في انتظار الإدخال، أو أغلق جلسة SSH.
أكثر معلومات مفصلةتمت الإشارة إلى إشارات إنهاء العملية في