كيفية قتل عملية Linux عن طريق رقم المنفذ

روابط سريعة

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




عمليات القتل

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

ذات صلة: كيفية قتل العمليات من محطة طرفية Linux

أياً كانت دوافعك، فهناك طرق لقتل عملية من سطر أوامر لينكس. الطريقة الكلاسيكية هي استخدام أمر القتل مع معرف العملية التي تريد إنهاؤها. kill الأمر له بعض الأقارب المقربين.

pkill 

سيؤدي الأمر إلى قتل عملية حسب الاسم، و

killall 

سيؤدي ذلك إلى قتل جميع العمليات التي يمكنها العثور عليها والتي تشترك في جزء من الاسم.

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


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

الأمر أشبه بوصول البريد العادي إلى الفندق، ثم فرزه وتسليمه إلى الغرف المناسبة. عنوان IP يشبه عنوان الشارع الذي يقع فيه الفندق، وأرقام الغرف تشبه أرقام المنافذ.

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


إنشاء اتصالات مع socat

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

sudo apt install socat

تثبيت socat على أوبونتو

حول استخدام فيدورا dnf:

sudo dnf install socat

تثبيت socat على فيدورا

في Manjaro تحتاج إلى كتابة:

sudo pacman -S socat

تثبيت socat على Manjaro


بناء الجملة لـ socat إن الأمر بسيط للغاية، وإن كان طويلًا بعض الشيء. نحتاج إلى توفير عناوين المصدر والوجهة. لكلٍ من هذه العناوين، نحتاج إلى توفير البروتوكول وعنوان IP ورقم المنفذ. يمكننا استبدال STDIN أو STDOUT كمصدر أو وجهة.

ينشئ هذا الأمر اتصالاً بين مقبس استماع TCP على المنفذ 7889، على عنوان IP للحلقة الراجعة 127.0.0.1، ومنفذ STDOUT. يشير الرمز “” إلى&“يتم تشغيل الأمر في الخلفية، حتى نحتفظ بالوصول إلى سطر الأوامر.

socat tcp-listen:7889,bind=127.0.0.1 stdout &

إنشاء اتصال مقبس TCP للاستماع مع socat


سننشئ اتصالين آخرين حتى يكون لدينا مجموعة صغيرة من المقابس التي تستخدم بروتوكولات مختلفة. سننشئ اتصال UDP و اتصال SCTPالجزء الوحيد الذي يتغير في الأمر هو البروتوكول.

socat udp-listen:7889,bind=127.0.0.1 stdout &

socat sctp-listen:9999,bind=127.0.0.1 stdout &

إنشاء اتصالات مآخذ UDP وSCTP للاستماع مع socat

ذات صلة: ما هو الفرق بين TCP وUDP؟

استخدام Kill

بالطبع، يمكننا أن نستخدم kill لإنهاء العملية، طالما أننا نعرف معرف العملية. للعثور على معرف العملية، يمكننا استخدام lsof يأمر.

لإدراج تفاصيل العملية على المنفذ 7889 التي تستخدم بروتوكول TCP، نستخدم -i خيار (عنوان الإنترنت) مثل هذا.

lsof -i tcp:7889


استخدام lsof لإظهار تفاصيل عملية باستخدام منفذ وبروتوكول محددين
`

معرف العملية لهذه العملية هو 3141، ويمكننا المضي قدمًا واستخدامه مع kill:

sudo kill 3141

يمكننا توفير بعض الجهد على أنفسنا إذا استخدمنا الأنابيب. إذا قمنا بتوصيل مخرجات lsof داخل awk وأخبر awk للبحث عن الأسطر التي تحتوي على المنفذ الذي نهتم به—7889—وطباعة الحقل الثاني من هذا السطر، سنقوم بعزل PID.

lsof -i tcp:7889 | awk '/7889/{print $2}'

توجيه مخرجات lsof إلى awk

يمكننا بعد ذلك توجيه الإخراج من awk الى داخل kill الأمر باستخدام xargs. ال xargs يأخذ الأمر مدخلاته الموجهة ويمررها إلى أمر آخر كمعلمات لسطر الأوامر. سنستخدم xargs مع kill يأمر.


lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

استخدام الأنابيب لنقل مخرجات lsof إلى awk ومن awk إلى xargs ثم قتلها

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

lsof -i tcp:7889

استخدام lsof للبحث عن تفاصيل عملية باستخدام منفذ وبروتوكول محدد دون جدوى

لأن lsof لا يبلغ عن أي شيء، ونحن نعلم أنه لا يوجد مثل هذا الارتباط.

يمكننا إزالة عملية باستخدام بروتوكول UDP ببساطة عن طريق استبدال “tcp” بـ “udp” في أمرنا السابق.


lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

استخدام الأنابيب لأخذ مخرجات lsof إلى awk ومن awk إلى xargs وkill، لمقبس UDP

لكن، lsof لا يتعرف على بروتوكول SCTP.

lsof -i sctp:7889

لا يعمل lsof مع بروتوكول SCTP

يمكننا استخدام ss الأمر للقيام بذلك. نحن نستخدم -S (SCTP) خيار للبحث عن مآخذ SCTP، -a (الكل) خيار للبحث عن جميع أنواع المقابس (الاستماع، والقبول، والمتصلة، وما إلى ذلك)، و -p خيار (العمليات) لإدراج تفاصيل العملية باستخدام المقبس.

ss -Sap


طباعة تفاصيل عملية باستخدام مقبس SCTP مع ss

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

سوف نقوم بنقل الناتج من ss داخل grep وابحث عن رقم المنفذ الخاص بنا، 7889. وسنقوم بنقل الإخراج من grep داخل awk. في awkنحن نستخدم -F (سلسلة فاصلة) خيار لتعيين فاصلة “,“كفاصل للحقل. نبحث عن سلسلة تحتوي على “pid=”، ونطبع الحقل الثاني المفصول بفاصلة من تلك السلسلة.

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}'


استخدام الأنابيب لتوصيل ss وgrep وawk لاستخراج سلسلة PID

لقد أعطانا هذا السلسلة “pid=2859”.

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

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

استخدام الأنابيب لتوصيل ss وgrep وawk مرتين لاستخراج PID

لقد قمنا الآن بعزل معرف العملية. يمكننا استخدام xargs لتمرير معرف العملية إلى kill كمعلمة لسطر الأوامر.


ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

استخدام الأنابيب مع ss وgrep وawk وxargs لإنهاء عملية مأخذ SCTP

يؤدي هذا إلى قتل العملية التي كانت تستخدم مقبس بروتوكول SCTP على المنفذ 7889.

أمر التثبيت

ال fuser الأمر يبسط الأمور كثيرًا. الجانب السلبي هو أنه يعمل فقط مع مآخذ TCP وUDP. على الجانب الإيجابي، هذان هما النوعان الأكثر شيوعًا من المآخذ التي ستحتاج إلى التعامل معها. fuser لقد تم تثبيت الأمر بالفعل على أجهزة الكمبيوتر Ubuntu وFedora وManjaro التي قمنا بفحصها.

كل ما عليك فعله هو استخدام -k خيار (القتل)، وتوفير المنفذ والبروتوكول. يمكنك استخدام -n خيار (namespace) وتوفير البروتوكول والمنفذ، أو استخدم “تنسيق الاختصار المائل للأمام” ووضع رقم المنفذ أولاً.


fuser -n tcp 7889

fuser 7889/udp

استخدام أمر fuser لحذف العمليات باستخدام مآخذ TCP وUDP

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

جرب التثبيت أولاً

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

ذات صلة: كيفية إنهاء عملية على نظام التشغيل Mac

أضف تعليق