قائمة طعام
مجانا
تسجيل
بيت  /  التثبيت والإعداد/ كيف تقتل عملية توقف في Linux xfce. إتقان أمر القتل في لينكس

كيف تقتل عملية توقف في لينكس إكسفس. إتقان أمر القتل في لينكس

الإشارات هي مقاطعات للبرامج. يتم استخدامها للتواصل بين العمليات في UNIX وأنظمة التشغيل المشابهة لـ UNIX مثل Linux و Mac OS.

كانت الإشارات قيد الاستخدام منذ Bell Labs UNIX في السبعينيات وهي الآن محددة رسميًا بواسطة معيار POSIX. عندما تصل إشارة إلى عملية ما ، يقاطع نظام التشغيل تدفق التنفيذ العادي للعملية ويقدم إشعارًا.

لا يهم نظام التشغيل الذي تستخدمه ، فمن المؤكد أنك ستواجه حظر تطبيقاتك ورفضها للعمل بشكل صحيح. في نظام التشغيل Unix و Linux ، هناك أمر "kill" يمكنك استخدامه لقتل عملية على الفور ، ولكن ليس هذا فقط ، ولكن سأتحدث عنه لاحقًا. في هذه المقالة "Kill command in Unix / Linux" سأخبر وأعرض أوامر مختلفة لأداة kill باستخدام أمثلة جاهزة.

قتل الأوامر والإشارات

عندما تقوم بإصدار أمر "kill" ، فأنت تقوم بالفعل بإرسال إشارة إلى النظام وتوجيهه لإنهاء برنامج الروبوت غير الصحيح للتطبيق. هناك ما مجموعه 60 إشارة يمكن استخدامها ، ولكن كل ما تحتاج إلى معرفته حقًا هو SIGTERM (15) و SIGKILL (9).

يمكنك عرض جميع الإشارات بالأمر:

# اقتل -l

على نظام macOS الخاص بي:

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

الإشارات الأساسية

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

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

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

النحو لكلمة "قتل".

صيغة الأمر هي:

# قتل PID (s)

# قتل [-s] [-l]٪ pid

الإشارة الافتراضية (إذا لم يتم تحديدها) هي SIGTERM. عندما لا تساعد هذه الإشارة ولا تعمل ، يمكنك استخدام الخيارات التالية لـ "kill" لإجبار العملية على الإنهاء:

# اقتل SIGKILL PID

# اقتل -9 PID

حيث "-9" هي إشارة إشارة SIGKILL.

إذا كنت لا تعرف التطبيق PID الذي يجب استخدامه للتخلص منه ، فقم بتشغيل الأمر:

$ ps -aux

وإذا كنت تعرف تطبيقًا معينًا (على سبيل المثال ، apache) ، فيمكنك التخلص من الأشياء غير الضرورية وعرض جميع العمليات لهذه الخدمة:

$ ps -aux | grep اباتشي

وسيعرض هذا جميع التطبيقات قيد التشغيل مع PID (s).

على سبيل المثال ، لقتل تطبيق ما ، أقوم بتشغيل الأمر التالي:

# اقتل -9 3629

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

# kill -9 PID1 PID2 PID 3

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

# اقتل -1 number_of_PID

تشمل الإشارات المفيدة بشكل خاص HUP و INT و kill و STOP و CONT و 0.

الخيارات هي:

-s اسم_الإشارة
الاسم الرمزي للإشارة التي تحدد الإشارة لإرسال إشارة غير افتراضية إليها.


إذا لم يتم تحديد المعامل ، فقم بإظهار أسماء الإشارات ؛ بخلاف ذلك ، اكتب اسم الإشارة المقابلة لـ exit_status.

-اسم_الإشارة
الاسم الرمزي للإشارة التي تحدد الإشارة لإرسالها إلى TERM افتراضيًا.

-signal_number
عدد صحيح عشري غير سالب يحدد الإشارة لإرسالها إلى TERM افتراضيًا.

PIDs التالية لها أهمية خاصة:
-1 إذا كان المستخدم المتميز ، فقم ببث الإشارة إلى جميع العمليات ؛ خلاف ذلك البث لجميع العمليات
جي للمستخدم.

بعض الإشارات الأكثر استخدامًا هي:

  • 1 HUP (شنق) - شنق.
  • 2 INT (المقاطعة) - المقاطعة.
  • 3 خروج (إنهاء) - خروج.
  • 6 ABRT (إحباط) - المقاطعات.
  • 9 اقتل (قتل غير قابل للكسر ، قتل غير جاهل)
  • 14 ALRM (المنبه) - المنبه.
  • 15 TERM (إشارة إنهاء البرنامج)

بكيل

يسمح لك الأمر "pkill" باستخدام أنماط التعبير العادي الموسعة ومعايير المطابقة الأخرى. بدلاً من استخدام PID ، يمكنك الآن إنهاء التطبيق عن طريق إدخال اسم العملية. على سبيل المثال ، لقتل متصفح Firefox ، ما عليك سوى تشغيل الأمر:

# قحبه

نظرًا لأنه يتطابق مع نمط التعبير العادي ، يمكنك أيضًا إدخال جزء من اسم العملية ، مثل:

# قحبة

لتجنب "قتل" العمليات الخاطئة ، يمكنك عمل "pgrep -l [processname]" في قائمة العمليات المناسبة.

يحتوي الأمر pkill على العديد من الخيارات ، على سبيل المثال ، إذا حددت الخيار "-u" ، فسيتيح لك تحديد اسم مستخدم أو معرف. في هذا المثال ، نرسل إشارة TERM إلى جميع العمليات التي يملكها مستخدم "لا أحد":

# pkill -u لا أحد

اقتل الكل

يستخدم Killall اسم العملية بدلاً من PID ، و "يقتل" جميع مثيلات العملية التي تحمل الاسم نفسه. على سبيل المثال ، إذا كنت تقوم بتشغيل مثيلات متعددة من متصفح Firefox ، فيمكنك قتلهم جميعًا باستخدام الأمر:

# قاتل فايرفوكس

في Gnome ، يمكنك إعادة تشغيل Nautilus بالأمر:

# كيلال نوتيلوس

اكس كيل

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

الإشارات الأخرى المستخدمة

SIGABRT

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

SIGALRM و SIGVTALRM و SIGPROF

يتم إرسال إشارة ALRM و / أو VTALRM و / أو PROF إلى عملية عندما تنتهي المهلة المحددة عند استدعاء وظيفة الإنذار (على سبيل المثال ، setitimer).

ALRM

يتم إرساله عند مرور الوقت الحالي أو الساعة.

VTALRM

يتم إرساله عند انتهاء مدة وحدة المعالجة المركزية (CPU) التي استخدمتها العملية.

بروف

يتم إرساله عند انتهاء صلاحية وقت المعالج الذي تستخدمه العملية والنظام نيابة عن العملية.

سيجبوس

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

SIGCHLD

يتم إرسال إشارة CHLD إلى عملية عندما تنتهي العملية الفرعية أو تنقطع أو تستأنف بعد مقاطعتها. أحد الاستخدامات الشائعة للإشارة هو إرسال إشارة إلى نظام التشغيل لتنظيف الموارد التي تستخدمها عملية تابعة بعد انتهائها دون استدعاء نظام صريح.

سيجكون

ترشد إشارة CONT نظام التشغيل إلى إعادة تشغيل عملية تم تعليقها مسبقًا بواسطة إشارة STOP أو TSTP. من أهم ميزات هذه الإشارة التحكم في التشغيل في غلاف Unix.

سيجفي

يتم إرسال إشارة FPE إلى عملية عندما تقوم بإجراء عملية حسابية خاطئة ، مثل القسمة على الصفر.

تنفس الصعداء حتى

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

سيجيل

يتم إرسال إشارة ILL إلى عملية عندما تحاول تنفيذ أوامر خبيثة أو غير معروفة أو ذات امتيازات (تعليمات).

توقع

يتم إرسال إشارة INT إلى عملية من طرف التحكم عندما يرغب المستخدم في إنهاء العملية. يبدأ هذا عادة بالضغط على Control-C ، ولكن في بعض الأنظمة ، "حذف" أو "كسر".

سيكيل

يتم إرسال إشارة KILL إلى عملية الإنهاء على الفور. على عكس SIGTERM و SIGINT ، لا يمكن التقاط هذه الإشارة أو تجاهلها ، ولا يمكن لعملية الاستقبال إجراء أي تنظيف بعد تلقي هذه الإشارة.

سيجبيب

يتم إرسال إشارة PIPE إلى عملية عندما تحاول الكتابة إلى أنبوب بدون عملية متصلة بالطرف الآخر.

سيجكويت

يتم إرسال إشارة QUIT إلى عملية من محطة التحكم الخاصة بها عندما يطلب المستخدم تفريغ العملية.

SIGSEGV

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

سيجستوب

تخبر إشارة STOP نظام التشغيل بإيقاف العملية لاستئنافها لاحقًا.

سيغرم

يتم إرسال إشارة TERM إلى عملية لطلب إنهائها. على عكس إشارة القتل ، يمكن تفسيرها أو تجاهلها من خلال العملية. يسمح هذا للعملية بتنفيذ تنفيذ "لطيف" لإيقاف تحرير الموارد وحفظ الحالة إذا لزم الأمر. وتجدر الإشارة إلى أن SIGINT مطابق تقريبًا لـ SIGTERM.

SIGTSTP

يتم إرسال إشارة TSTP إلى عملية التحكم الطرفية وتخبرها بالتوقف مؤقتًا. يبدأ هذا عادةً بواسطة المستخدم بالضغط على Control-Z. على عكس SIGSTOP ، يمكن لهذه العملية تسجيل معالج إشارة أو تجاهل إشارة.

SIGTTIN و SIGTTOU

في TTIN و TTOU ، يتم إرسال الإشارات إلى عملية عندما تحاول القراءة أو الكتابة ، على التوالي ، من طرف (tty) في الخلفية. كقاعدة عامة ، لا يمكن استقبال هذه الإشارة إلا من خلال العمليات التي تتحكم فيها لوحة العمل ؛ لا تملك الشياطين محطات تحكم ولا ينبغي أن تستقبل هذه الإشارة أبدًا.

SIGUSR1 و SIGUSR2

يتم إرسال إشارات USR1 و USR2 إلى عملية وتشير إلى الشروط التي يحددها المستخدم.

SIGPOLL

يتم إرسال إشارة POLL إلى عملية عند حدوث حدث I / O غير متزامن.

سيجسيس

يتم إرسال إشارة SYS إلى عملية عندما تمرر وسيطة سيئة لاستدعاء النظام.

سيغراب

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

سيجورج

يتم إرسال إشارة URG إلى عملية عندما يكون للمقبس بيانات عاجلة أو خارج النطاق متاحة للقراءة.

SIGXCPU

يتم إرسال إشارة XCPU إلى عملية عندما تستخدم وحدة المعالجة المركزية (CPU) لأكثر من مقدار معين من الوقت يحدده المستخدم. يضمن وصول إشارة XCPU أن العملية تحفظ جميع النتائج الوسيطة بسرعة وتنتهي بأمان قبل أن يتم إنهاؤها بواسطة نظام التشغيل بإشارة SIGKILL.

SIGXFSZ

يتم إرسال إشارة XFSZ إلى عملية عندما يكبر الملف (أكبر من القيمة المحددة) من الحد الأقصى للقيمة المسموح بها.

سيجرتمين إلى SIGRTMAX

إشارات RTMIN - RTMAX مخصصة للاستخدام. إنها إشارات في الوقت الحقيقي.

إشارات متنوعة

لم يتم توحيد الإشارات التالية بواسطة POSIX ، ولكنها تُستخدم أحيانًا في بعض الأنظمة.

سيغمت

يتم إرسال إشارة EMT في العملية عند حدوث مقاطعة للمحاكي.

SIGINFO

يتم إرسال إشارة INFO في العملية عند تلقي طلب حالة من طرف التحكم.

SIGPWR

يتم إرسال إشارة PWR في العملية عندما يواجه النظام انقطاعًا في الطاقة.

سيغلوست

يتم إرسال إشارة LOST إلى العملية عند فقد "قفل الملف".

سيجوينش

يتم إرسال إشارة WINCH إلى العملية عندما يغير طرف التحكم حجمها.

إرسال إشارات من لوحة المفاتيح

يمكن إرسال الإشارات من لوحة المفاتيح. يتم سرد عدد قليل من الافتراضات القياسية أدناه. يمكن تحديد اختصارات لوحة المفاتيح الافتراضية لإرسال إشارات المقاطعة باستخدام الأمر stty.

السيطرة- C

إرسال SIGINT (المقاطعة). بشكل افتراضي ، يؤدي هذا إلى إنهاء العملية.

CTRL-Z

إرسال SIGTSTP (معلق). بشكل افتراضي ، يتسبب هذا في تعليق العملية لكافة العمليات.

كنترول-\

أرسل SIGQUIT (Quit). بشكل افتراضي ، يؤدي هذا إلى إنهاء العملية على الفور وإعادة تعيين kernel.

السيطرة- T

إرسال SIGINFO (INFO). بشكل افتراضي ، يتسبب هذا في قيام نظام التشغيل بعرض معلومات حول الأمر. غير مدعوم في جميع الأنظمة.

خاتمة

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

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

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

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

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

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

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

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

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

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

kill -pid_process إشارة $

الإشارة هي إحدى الإشارات المذكورة أعلاه لإنهاء العملية. بشكل افتراضي ، إذا لم يتم تحديد هذه المعلمة ، يتم استخدام إشارة 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 إليه. حتى تتمكن من قتل عملية تسمى لينكس. على سبيل المثال ، إذا أردنا إنهاء نفس الأمر ping:

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

pkill -TTERM بينغ

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

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

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

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

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

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

الاستنتاجات

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

يجب استخدام الوسيطة -9 (أو KILL) لأمر القتل فقط على الأنظمة المتوافقة مع POSIX إذا لزم الأمر. لماذا؟ لا يمكن معالجة إشارة القتل من خلال العملية. هذا يعني أنه بعد إنهاء العملية باستخدام kill -9 ، ستُترك العمليات الفرعية في الذاكرة وتصبح معزولة ، وسيُمتلئ نظام الملفات بالملفات المؤقتة ، وستكون أجزاء الذاكرة المشتركة نشطة ، وسيتم تعليق المآخذ ، وسوف يتم atexit (3) لا يتم إعدامه على الإطلاق. نتيجة لذلك ، هناك خطر مواجهة مشاكل غير متوقعة ويصعب تصحيحها.

استخدم TERM الافتراضي للإشارة بدلاً من ذلك ، واستخدم KILL فقط إذا ثبت أن الإشارات الأقل إشكالية غير فعالة:

اقتل 6738
قتل $ -INT 6738
قتل $ -HUP 6738
6738

إذا فشلت حتى إشارة KILL في إنهاء العملية ، فهذا يعني أن العملية على الأرجح عالقة في عملية الإدخال / الإخراج أو في حالة أخرى لم يتم إنهاؤها. قد تحتاج إلى إعادة التشغيل أو فرض إلغاء تحميل محرك شبكة عربات التي تجرها الدواب.

يعد الاستخدام الافتراضي لـ kill -KILL أمرًا مقبولاً عند التعامل مع تطبيق إشكالي ، على سبيل المثال ، غالبًا ما تنتهي الإصدارات القديمة من Netscape بإشارة KILL فقط. ومع ذلك ، يعد هذا استثناءً نادرًا للقاعدة: استخدم KILL على تلك التطبيقات المعروفة فقط.

المشاكل التي تحدث عند إنهاء العمليات

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

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

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

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

لمزيد من المعلومات حول إشارات إنهاء العملية ، راجع

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

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

معرف عملية التعليق

للبحث نحن بحاجة إلى أوامر ملاحظة و grep. فريق ملاحظة- سيعرض لنا قائمة العمليات النشطة في النظام ومعلومات عنها والأمر grep- سيبحث عن نتائج الأمر ملاحظة. لذلك دعونا نفتح المحطة السيطرة + alt + t) وإلقاء نظرة على العمليات النشطة

ملاحظة محورية

كما لاحظت بالفعل ، القائمة كبيرة جدًا والتمرير خلالها للعثور على العملية التي نحتاجها هو مضيعة للوقت ، لذلك سنستخدم برنامجًا رائعًا grep. للعثور على العملية التي نحتاجها ، بعد كتابة grep ، حدد التطبيق الذي نبحث عنه. باستخدام Viber كمثال ، يبدو كالتالي:

ps axu | 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 الذي تم إطلاقه ، يمكنك أن تقرأ عن هذا التطبيق. السطر الثاني هو فايبر نفسه مباشرة ، والذي سوف "نطفئه" اليوم ، لكن ما هو السطر الثالث؟ العملية الثالثة هي العملية نفسها grep، نظرًا لأننا حددنا كلمة viber كمعامل بحث ، ووجدت grep نفسها في إخراج الأمر ملاحظة.

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

بيدوف فايبر

كما لاحظت بالفعل ، حصلت على 3 خطوط مع تطبيق Viber النشط

إنهاء العملية أو ، ببساطة ، "القتل العمد"

الآن لقد عرفنا معرف عملية Viber ولدينا الفرصة "لقتله":

اقتل 22697

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

قتل -9 22697

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

قتل -l