كيف تقتل عملية لينكس. عمليات القتل في Linux - أوامر ps وkill وkillall كيفية إيقاف عملية في Linux

02.09.2023

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

1. ما هو PID

قبل أن نبدأ، نحتاج إلى معرفة ما هو معرف العملية (PID).

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

الآن، من أجل العثور على PID لكل عملية قيد التشغيل على الخادم، يمكننا تشغيل الأمر التالي:

وهذا يعطينا قائمة بجميع العمليات الجارية ومعرفات PID المقابلة لها.

إذا أردنا العثور على PID لعملية معينة، فيمكننا استخدام الأمر pidof متبوعًا باسم العملية. على سبيل المثال، لمعرفة معرّف عملية MySQL، يمكنك تشغيل الأمر التالي:

بيدوف الخلية

للحصول على معلومات أكثر تفصيلا، يمكننا استخدام الأمر ملاحظة auxجنبا إلى جنب مع grep:

بي اس اوكس | grep mysql

الآن بعد أن عرفنا ما هو PID وكيفية العثور على PID لعملية معينة، يمكننا الانتقال إلى القسم التالي ومعرفة كيفية إيقافه.

2. قم بإنهاء العملية باستخدام أمر القتل في Linux

هناك بعض القواعد المهمة التي نحتاج إلى معرفتها قبل البدء في استخدام أمر القتل.

  • يمكنك فقط إيقاف العمليات الأصلية التي تنتمي إلى معرف المستخدم الخاص بك
  • لا يمكنك قتل عمليات المستخدمين الآخرين
  • لا يمكنك إنهاء عمليات النظام (إلا إذا كنت مستخدمًا متميزًا)
  • يمكن للمستخدم الجذر إنهاء أي عملية مستخدم آخر وأي عملية نظام

عندما ننهي عملية ما باستخدام أمر kill، فإننا في الواقع نرسل إشارة PID المحددة التي نريد إيقافها. يتم استخدام الإشارات التالية بواسطة أمر القتل:

1 = اغلق الخط 9 = اقتل 15 = انهاء المكالمة

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

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

على سبيل المثال، إذا كان PID هو 6738، فيمكننا استخدام الأمر التالي:

قتل -9 6738

3. قم بإنهاء العملية باستخدام أمر pkill في Linux

إذا كنت تريد استخدام اسم العملية بدلاً من معرف PID الخاص بها لإيقافها، فيمكنك استخدام الأمر pkill. على سبيل المثال، إذا كانت العملية التي نريد إيقافها تسمى , فيمكننا استخدام الأمر التالي لإيقافها:

بي كيل ماي اس كيو ال

4. قم بإنهاء العملية باستخدام أمر killall في Linux

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

قتل الخلية

في هذا المثال، سنوقف عملية MySQL وجميع العمليات التابعة لها.

إنها الأمثلة الأكثر شيوعًا لقتل العمليات في Linux.

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

أبسط و طريقة عالميةقتل عملية في Linux يستخدم الأوامر الطرفية. سيعمل هذا الخيار على أي توزيعة لينكس.

العمليات في لينكس

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

تتمتع جميع العمليات التي تعمل على Linux بالسمات التالية:

  1. PID هو معرف فريد لكل عملية.
  2. PPID - معرف العملية الأصلية.
  3. معرف المستخدم الذي بدأ العملية.
  4. أولوية.
  5. حالة العملية.

كل عملية قيد التشغيل تكون في إحدى الحالات:

  • "في تَقَدم." يتم استخدام الحرف R لتمثيل هذه الحالة.
  • تسمى العملية التي بدأت تشغيل النظام، مثل الإدخال أو الإخراج، وتنتظر اكتمالها، "الانتظار". يُشار إليه بالحرف S.
  • العملية التي أوقفها المستخدم أو نظام التشغيل Linux تكون في حالة التوقف. يشار إلى هذه الحالة بالرمز T.
  • "الزومبي" هي العمليات التي لم تعد قيد التشغيل ولكنها تستهلك الموارد. نظام التشغيل. تم تحديدهم بالحرف Z.
  • لا يمكن إنهاء العملية المستمرة حتى تكتمل عملية DMA. يتم الإشارة إلى العملية بالرمز D.

عملية البحث

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

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

  • PID - رقم العملية الفريد؛
  • المستخدم - تسجيل دخول المستخدم الذي أطلق هذه العملية؛
  • العلاقات العامة - أولوية العملية في وقت معين؛
  • NI - الأولوية المعينة للعملية بواسطة أمر NICE؛
  • S هي حالة هذه العملية؛
  • %CPU - مقدار الوقت الذي تستغرقه وحدة المعالجة المركزية (CPU) في هذه العملية (بالنسبة المئوية)؛
  • %MEM-الحجم كبشوالتي تستغرقها هذه العملية (بالنسبة المئوية)؛
  • TIME+ - مقدار الوقت الذي انقضى منذ بدء العملية؛
  • COMMAND هو البرنامج الذي بدأ العملية.

يتم عرض المعلومات المقدمة بواسطة الأمر العلوي مرتبة حسب مستوى وقت وحدة المعالجة المركزية المستخدمة (عمود %CPU). يمكن للمستخدم تغيير ترتيب الفرز:

  • لفرز العمليات حسب مقدار ذاكرة الوصول العشوائي المشغولة (عمود %MEM)، تحتاج إلى الضغط على مجموعة المفاتيح Shift+M؛
  • يمكنك الفرز حسب رقم العملية (عمود PID) باستخدام تركيبة Shift+N؛
  • فرز حسب وقت التشغيل (عمود TIME+) - Shift+T.
  • العودة إلى الفرز الأصلي حسب مستوى تحميل وحدة المعالجة المركزية - اضغط على Shift + P.

باستخدام الأمر ps

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

يحتوي الأمر ps على الخيارات التالية:

  • أ - إظهار العمليات لجميع المستخدمين؛
  • u - عرض المستخدم صاحب العملية؛
  • x - إظهار العمليات غير المرتبطة بالمحطة. هذا الخيارمهم عند البحث عن معلومات حول تطبيق الرسومات.

باستخدام مزيج من أوامر 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.

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


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

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

العثور على PID لعملية معلقة

كل عملية في 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

أمر 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 لهذه التطبيقات المعروفة ولهم فقط.

المشاكل التي تمت مواجهتها عند إنهاء العمليات

يمكن أن يؤدي إرسال إشارات مختلفة بشكل تسلسلي إلى حدوث المشكلات التالية: أولاً، قد تستغرق العملية ثوانٍ، أو حتى عشرات الثواني، لتنتهي بشكل آمن. استغرق أحد المنتجات التي استخدمتها أكثر من 30 ثانية لينتهي بشكل صحيح بعد تلقي إشارة TERM. ولحسن الحظ، تم اكتشاف هذه الميزة أثناء الاختبار، لذلك تم كتابة سكريبت مناسب لهذه الحالة. ثانيًا، توجد أحيانًا مواقف تنتهي فيها عملية قديمة بينما تستحوذ عملية جديدة على معرفها في الفاصل الزمني بين إشارات TERM وKILL. الأنظمة ذات معدل دوران العمليات المتزايد والأنظمة التي تقوم النواة بتعيين معرفات PID لها ترتيب عشوائيعلى سبيل المثال أوبن بي إس دي. التحقق من اسم العملية أو معرف PPID الخاص بها لا يساعد دائمًا، نظرًا لأن العملية الجديدة يمكن أن تكون شوكة من نفس الأصل ولها نفس الاسم، لذلك قد تتحقق البرامج النصية المصابة بجنون العظمة أيضًا من وقت إنشاء العملية أو البيانات الوصفية الأخرى قبل إرسال الإشارة. قد تحدث هذه المواقف نادرًا، لكنها تستحق أخذها في الاعتبار إذا كان عليك التعامل مع عملية حرجة.

إشارات إنهاء العملية

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

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

أكثر معلومات مفصلةتمت الإشارة إلى إشارات إنهاء العملية في