حاولت إغلاق Tomcat باستخدام ./shutdown.sh
من دليل Tomcat /bin
. ولكن وجدت أن الخادم لم يغلق بشكل صحيح. وبالتالي لم أستطع إعادة التشغيل
My Tomcat يعمل على المنفذ 8080
.
أريد قتل عملية Tomcat التي تعمل على 8080
. أريد أولاً الحصول على قائمة العمليات التي تعمل على منفذ معين (8080) لتحديد العملية التي يجب قتلها.
استخدم الأمر
Sudo netstat -plten |grep Java
يستخدم grep Java
كـ Tomcat
يستخدم Java
كعملياتهم.
وسوف تظهر قائمة العمليات مع رقم المنفذ ومعرف العملية
tcp6 0 0 :::8080 :::* LISTEN
1000 30070621 16085/Java
الرقم قبل /Java
هو معرف العملية. الآن استخدم أمر kill
لقتل العملية
kill -9 16085
-9
يعني أن العملية سوف تقتل بقوة.
سيقوم هذا fuser 8080/tcp
بطباعة معرف العملية الخاص بالعملية المرتبطة بهذا المنفذ.
وهذا fuser -k 8080/tcp
سيقتل تلك العملية.
يعمل على نظام Linux فقط. أكثر عالمية هو استخدام lsof -i4
(أو 6 ل IPv6).
لسرد أي عملية تنصت إلى المنفذ 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
، وهو ما لا يكفي في بعض الأحيان لقتل عملية.).
يمكنك استخدام الأمر 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
أود أن أضيف هذا بطانة واحدة لقتل LISTEN فقط على منفذ معين:
kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)
إذا كنت تريد قتل عملية تعمل على رقم المنفذ 8080 ، فأنت بحاجة أولاً إلى العثور على رقم تعريف عملية المنفذ (8080) ثم قتله. قم بتشغيل الأمر التالي للعثور على رقم المنفذ 8080 PID:
Sudo lsof -t -i:8080
هنا،
بحيث يمكنك الآن بسهولة قتل PID الخاص بك باستخدام الأمر التالي:
Sudo kill -9 <PID>
هنا،
يمكنك استخدام أمر واحد لقتل عملية على منفذ محدد باستخدام الأمر التالي:
Sudo kill -9 $(Sudo lsof -t -i:8080)
لمزيد من المعلومات ، يمكنك رؤية الرابط التالي كيف تقتل العملية على منفذ معين على نظام لينكس
يؤدي هذا إلى طباعة معرفات العملية لكل شيء يعمل على <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)
}
لمعرفة رقم تعريف الخدمة الذي يعمل على منفذ معين:
netstat -tulnap | grep :*port_num*
سوف تحصل على وصف هذه العملية. الآن استخدام القتل أو القتل -9 معرف المنتج. قتل بسهولة.
منها مثلا
netstat -ap | grep :8080
tcp6 0 0 :::8080 :::* LISTEN 1880/Java
الآن:
kill -9 1880
تذكر تشغيل جميع الأوامر كـ root
الحصول على PID المهمة وقتلها.
lsof -ti:8080 | xargs kill
حاول مثل هذا ،
Sudo fuser -n tcp -k 8080
lsof -i tcp:8000
يسرد هذا الأمر المعلومات حول العملية الجارية في المنفذ 8000
kill -9 [PID]
هذا الأمر يقتل العملية
Linux : أولاً يمكنك العثور على PID لهذا الأمر إذا كنت تعرف المنفذ:
netstat -tulpn
مثال:-
Local Address Foreign Address State PID/Program name
:::3000 :::* LISTEN 15986/node
ثم تأخذ عملية القتل. قم بتشغيل الأمر التالي:
قتل -9 PID
مثال: -
قتل -9 15986
Linux : يمكنك استخدام هذا الأمر إذا كنت تعرف المنفذ:
netstat -plten | grep LISTEN | grep 8080
AIX:
netstat -Aan | grep LISTEN | grep 8080
ثم تأخذ العمود الأول (مثال: f100050000b05bb8) وقمت بتشغيل الأمر التالي:
rmsock f100050000b05bb8 tcpcb
عملية قتل.
kill -9 `fuser 8080/tcp|xargs -n 1`
، تقتل هذه الأوامر أيضًا العملية التي تستمع على المنفذ 8080 باستخدام TCP الاتصال
يمكنك معرفة قائمة بجميع المنافذ التي تعمل في النظام مع تفاصيلها (معرف المنتج ، العنوان ، إلخ):
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
إذا لم تتمكن من الوصول إلى أي.
Sudo apt-get install psmisc (or Sudo yum install psmisc)
Sudo fuser 80/tcp
النتيجة: 80/tcp: 1858 1867 1868 1869 1871
قتل عملية واحدة تلو الأخرى
قتل -9 1858
طريقة أخرى مع Git Bash:
stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
للبناء على ما @ 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