it-swarm.asia

كيف تقتل العملية التي تعمل على منفذ معين في Linux؟

حاولت إغلاق Tomcat باستخدام ./shutdown.sh من دليل Tomcat /bin. ولكن وجدت أن الخادم لم يغلق بشكل صحيح. وبالتالي لم أستطع إعادة التشغيل
My Tomcat يعمل على المنفذ 8080.

أريد قتل عملية Tomcat التي تعمل على 8080. أريد أولاً الحصول على قائمة العمليات التي تعمل على منفذ معين (8080) لتحديد العملية التي يجب قتلها.

536
veer7

استخدم الأمر

 Sudo netstat -plten |grep Java

يستخدم grep Java كـ Tomcat يستخدم Java كعملياتهم.

وسوف تظهر قائمة العمليات مع رقم المنفذ ومعرف العملية

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/Java

الرقم قبل /Java هو معرف العملية. الآن استخدم أمر kill لقتل العملية

kill -9 16085

-9 يعني أن العملية سوف تقتل بقوة.

221
veer7

سيقوم هذا fuser 8080/tcp بطباعة معرف العملية الخاص بالعملية المرتبطة بهذا المنفذ.

وهذا fuser -k 8080/tcp سيقتل تلك العملية.

يعمل على نظام Linux فقط. أكثر عالمية هو استخدام lsof -i4 (أو 6 ل IPv6).

731
nudzo

لسرد أي عملية تنصت إلى المنفذ 8080:

lsof -i:8080

لقتل أي عملية الاستماع إلى المنفذ 8080:

kill $(lsof -t -i:8080)

أو أكثر عنفا:

kill -9 $(lsof -t -i:8080)

(-9 يتوافق مع إشارة SIGKILL - terminate immediately/hard kill: راجع قائمة Kill Signals و ما هو الغرض من الخيار -9 في أمر kill؟ . إذا لم يتم تحديد إشارة إلى kill ، فإن إشارة TERM تُعرف -15 أو يتم إرسال soft kill ، وهو ما لا يكفي في بعض الأحيان لقتل عملية.).

477
Franck Dernoncourt

يمكنك استخدام الأمر lsof. واسمحوا رقم المنفذ مثل هنا هو 8090

lsof -i:8090

يقوم هذا الأمر بإرجاع قائمة العمليات المفتوحة على هذا المنفذ.

شيء مثل…

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)

لتحرير المنفذ ، اقتل العملية باستخدامه (معرف العملية هو 75782) ...

kill -9 75782

هذا واحد يعمل بالنسبة لي. هنا هو الرابط من المشاركة الأصلية: link

98
Kop4lyf

أود أن أضيف هذا بطانة واحدة لقتل LISTEN فقط على منفذ معين:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)

78
Gal Bracha

إذا كنت تريد قتل عملية تعمل على رقم المنفذ 8080 ، فأنت بحاجة أولاً إلى العثور على رقم تعريف عملية المنفذ (8080) ثم قتله. قم بتشغيل الأمر التالي للعثور على رقم المنفذ 8080 PID:

Sudo lsof -t -i:8080

هنا،

  • Sudo - أمر لطلب امتياز المسؤول (معرف المستخدم وكلمة المرور).
  • lsof - قائمة الملفات (تستخدم أيضًا لسرد العمليات ذات الصلة)
  • -t - إظهار معرف العملية فقط
  • -i - إظهار عملية اتصال الإنترنت فقط ذات الصلة
  • : 8080 - إظهار العمليات فقط في رقم المنفذ هذا

بحيث يمكنك الآن بسهولة قتل PID الخاص بك باستخدام الأمر التالي:

Sudo kill -9 <PID>

هنا،

  • قتل - أمر لقتل العملية
  • -9 - بقوة

يمكنك استخدام أمر واحد لقتل عملية على منفذ محدد باستخدام الأمر التالي:

Sudo kill -9 $(Sudo lsof -t -i:8080)

لمزيد من المعلومات ، يمكنك رؤية الرابط التالي كيف تقتل العملية على منفذ معين على نظام لينكس

58
mahfuz110244

يؤدي هذا إلى طباعة معرفات العملية لكل شيء يعمل على <port_number>:

fuser -n tcp <port_number> 

يطبع أيضًا بعض الأشياء إلى stderr ، لذلك:

fuser -n tcp <port_number> 2> /dev/null

يمكننا حينئذٍ توفير معرّفات العملية هذه للأمر kill:

Sudo kill $(fuser -n tcp <port_number> 2> /dev/null)

يمكنك أيضًا وضع هذا في وظيفة إذا كنت تفعل ذلك كثيرًا:

function killport() {
    Sudo kill $(fuser -n tcp $1 2> /dev/null)
}
37
Brian Peterson

لمعرفة رقم تعريف الخدمة الذي يعمل على منفذ معين:

netstat -tulnap | grep :*port_num*

سوف تحصل على وصف هذه العملية. الآن استخدام القتل أو القتل -9 معرف المنتج. قتل بسهولة.

منها مثلا

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/Java 

الآن:

kill -9 1880

تذكر تشغيل جميع الأوامر كـ root

31
Sanjay s.

الحصول على PID المهمة وقتلها.

lsof -ti:8080 | xargs kill
18
Rahul Garg

حاول مثل هذا ،

 Sudo fuser -n tcp -k 8080
18
Adil Abbasi
  1. lsof -i tcp:8000 يسرد هذا الأمر المعلومات حول العملية الجارية في المنفذ 8000

  2. kill -9 [PID] هذا الأمر يقتل العملية

12
Nandhitha Ramaraj

Linux : أولاً يمكنك العثور على PID لهذا الأمر إذا كنت تعرف المنفذ:

netstat -tulpn 

مثال:-

 Local Address  Foreign Address  State    PID/Program name

  :::3000       :::*             LISTEN    15986/node 

ثم تأخذ عملية القتل. قم بتشغيل الأمر التالي:

قتل -9 PID

مثال: -

قتل -9 15986

11
Kundan Kumar

Linux : يمكنك استخدام هذا الأمر إذا كنت تعرف المنفذ:

netstat -plten | grep LISTEN | grep 8080

AIX:

netstat -Aan | grep LISTEN | grep 8080

ثم تأخذ العمود الأول (مثال: f100050000b05bb8) وقمت بتشغيل الأمر التالي:

rmsock f100050000b05bb8 tcpcb

عملية قتل.

10
ben rhouma moez

kill -9 `fuser 8080/tcp|xargs -n 1` ، تقتل هذه الأوامر أيضًا العملية التي تستمع على المنفذ 8080 باستخدام TCP الاتصال

6
Harshit Garg

يمكنك معرفة قائمة بجميع المنافذ التي تعمل في النظام مع تفاصيلها (معرف المنتج ، العنوان ، إلخ):

netstat -tulpn

يمكنك معرفة تفاصيل رقم منفذ معين من خلال توفير رقم المنفذ في الأمر التالي:

Sudo netstat -lutnp | grep -w '{port_number}'

على سبيل المثال: Sudo netstat -lutnp | grep -w '8080 "سيتم تقديم التفاصيل مثل هذا:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

إذا كنت تريد قتل عملية باستخدام معرف المنتج ثم : kill -9 {PID}

إذا كنت تريد قتل عملية باستخدام رقم المنفذ : fuser -n tcp {port_number}

استخدم Sudo إذا لم تتمكن من الوصول إلى أي.

4
YAP
Sudo apt-get install psmisc (or Sudo yum install psmisc)
Sudo fuser 80/tcp

النتيجة: 80/tcp: 1858 1867 1868 1869 1871

قتل عملية واحدة تلو الأخرى

قتل -9 1858

1
Fadid

طريقة أخرى مع Git Bash:

stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
0
Lucas Moyano Angelini

للبناء على ما @ veer7 قال:

إذا كنت تريد معرفة ما كان على المنفذ ، فقم بذلك قبل أن تقتله.

$ Sudo netstat -plten |grep Java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/Java      
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/Java      
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/Java      
$ ps 25296
  PID TTY      STAT   TIME COMMAND
25296 ?        Sl     0:16 /usr/lib/jvm/Java-8-openjdk-AMD64/bin/Java -Dcatalina.base=/hom

استخدم 'ps' ورقم العملية التي أبلغ عنها netstat

0
JesseBoyd