it-swarm.asia

العثور على (وقتل) عملية قفل المنفذ 3000 على ماك

كيف يمكنني العثور على (وقتل) العمليات التي تستمع إلى/تستخدم منافذ tcp الخاصة بي؟ أنا على نظام التشغيل ماك العاشر.

في بعض الأحيان ، بعد تعطل أو بعض الأخطاء ، يقوم تطبيق Rails بتأمين منفذ 3000. لا يمكنني العثور عليه باستخدام ps -ef ...

عندما تفعل

Rails server

انا حصلت

العنوان قيد الاستخدام بالفعل - ربط (2) (Errno :: EADDRINUSE)

تحديث 2014:

لإكمال بعض الإجابات أدناه: بعد تنفيذ أوامر القتل ، قد يكون حذف ملف pid ضروريًا rm ~/mypath/myrailsapp/tmp/pids/server.pid

1378
oma
  1. يمكنك تجربة netstat

    netstat -vanp tcp | grep 3000
    
  2. من أجل macOS El Capitan الأحدث (أو إذا كان netstat لا يدعم -p) ، فاستخدم lsof

    Sudo lsof -i tcp:3000 
    
  3. ل Centos 7 الاستخدام

    netstat -vanp --tcp | grep 3000
    
2272
ghostdog74

تجد:

[Sudo] lsof -i :3000

قتل:

kill -9 <PID>
1464
Filip Spiridonov

لا شيء أعلاه عملت بالنسبة لي. يمكن لأي شخص آخر لديه تجربتي تجربة ما يلي (عمل معي):

يركض:

lsof -i :3000 (where 3000 is your current port in use)

ثم تحقق من حالة PID المبلغ عنها:

ps ax | grep <PID>

أخيرًا ، "انصرف عنها":

kill -QUIT <PID>
142
Austin

سطر واحد لاستخراج PID للعملية باستخدام المنفذ 3000 وقتلها.

lsof -ti:3000 | xargs kill

تزيل علامة -t كل شيء ما عدا PID من إخراج lsof ، مما يسهل قتله.

117
Zlemini

يمكنك استخدام lsof -i:3000.

هذا هو "قائمة الملفات المفتوحة". يمنحك هذا قائمة بالعمليات والملفات والمنافذ التي يستخدمونها.

93
DerMike

لقتل عملية مثل هذه بقوة ، استخدم الأمر التالي

lsof -n -i4TCP:3000 

حيث 3000 هو رقم المنفذ العملية قيد التشغيل في

هذا بإرجاع معرف العملية (PID) وتشغيل

kill -9 "PID"

استبدل PID بالرقم الذي تحصل عليه بعد تشغيل الأمر الأول

 For Instance, if I want kill the process running on port 8080

55
tadtab

في .bash_profile ، أنشئ اختصار لـ terminate عملية 3000:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

ثم ، اتصل بـ $terminate إذا تم حظره.

54
alexzg

من السهل تذكر سطر الأوامر هذا:

npx kill-port 3000

للحصول على أداة أكثر قوة مع البحث:

npx fkill-cli


PS: يستخدمون حزم جافا سكريبت لجهة خارجية. npx مدمج مع Node.js.

المصادر: Tweet | github

52
Bruno Lemos
lsof -P | grep ':3000' | awk '{print $2}'

سوف يمنحك هذا المعرف الشخصي فقط ، الذي تم اختباره على نظام MacOS.

34
Kris

إحدى الطرق لقتل عملية على المنفذ هي استخدام مكتبة python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). بمجرد التثبيت ، ببساطة:

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
27
YBathia

لعرض العمليات التي تمنع المنفذ:

netstat -vanp tcp | grep 3000

لقتل العمليات التي تحجب المنفذ:

kill $(lsof -t -i :3000)

25
Henry

البحث عن اتصال مفتوح

lsof -i -P | grep - أنا "أستمع"

قتل بواسطة معرف العملية

قتل -9 'PID'

22
Sourabh Bhagat

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

lsof -ti:3000 | xargs kill
21
Rahul Garg

البحث عن وقتل:

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

kill -9 $(lsof -ti tcp:3000)
15
Dylan Breugne

الطرق الممكنة لتحقيق ذلك:

أعلى

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

ps

يسرد الأمر ps العمليات الجارية. يسرد الأمر التالي جميع العمليات التي تعمل على نظامك:

ps -A

يمكنك أيضًا توجيه الإخراج عبر grep للبحث عن عملية محددة دون استخدام أي أوامر أخرى. سيبحث الأمر التالي عن عملية Firefox:

ps -A | grep firefox

الطريقة الأكثر شيوعًا لتمرير الإشارات إلى برنامج ما هي أمر القتل.

kill PID_of_target_process

lsof

قائمة بجميع الملفات المفتوحة والعمليات التي فتحتها.

lsof -i -P | grep -i "listen"
kill -9 PID

أو

 lsof -i tcp:3000 
13
smooth

الحل الأسهل : اقتل منافذ متعددة باستخدام أمر سطر واحد.

kill $(lsof -t -i:3000,3001) // 3000 and 3001 are the ports to be freed

lsof-t -i: 3000

82500

lsof-t -i: 3001

82499

lsof -t -i: 3001،3000

82499 82500

اقتل $ (lsof -t: i: 3001،3000)

إنهاء العمليات 82499 و 82500 في أمر واحد.

lsof-t -i: 3000

lsof-t -i: 3001

يمكنك استخدام هذا في البرامج النصية package.json

"scripts": { "start": "kill $(lsof -t -i:3000,3001) && npm start" }

11
Abhijith

باستخدام sindresorhus / s fkill الأداة ، يمكنك القيام بذلك:

$ fkill :3000
5
Kodie Grantham

أضف إلى ~/.bash_profile:

function killTcpListen () {
  kill -QUIT $(Sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}

ثم source ~/.bash_profile وتشغيله

killTcpListen 8080

5
rofrol

قمت بعمل القليل من أجل هذا ، أضفه إلى ملف rc (.bashrc ، .zshrc أو أيا كان)

function kill-by-port {
  if [ "$1" != "" ]
  then
    kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
  else
    echo "Missing argument! Usage: kill-by-port $PORT"
  fi
}

ثم يمكنك فقط كتابة kill-by-port 3000 لقتل خادم Rails الخاص بك (استبدال 3000 لأي منفذ يعمل عليه)

إذا لم يتم ذلك ، يمكنك دائمًا كتابة kill -9 $(cat tmp/pids/server.pid) من دليل جذر Rails

3
Caleb Keene

TL، DR:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

إذا كنت في موقف حيث يوجد كل من العملاء والخوادم يستخدمون المنفذ ، على سبيل المثال:

$ lsof -i tcp:3000
COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)

فأنت ربما لا تريد قتل كليهما.

في هذه الحالة ، يمكنك استخدام -sTCP:LISTEN لعرض معرّف العمليات الذي يتم الاستماع إليه فقط. عند دمج هذا مع تنسيق -t terse ، يمكنك إنهاء العملية تلقائيًا:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
3
Benjie

lsof -i tcp:port_number - سوف يسرد العملية الجارية على هذا المنفذ

kill -9 PID - سيقتل العملية

في قضيتك ، سيكون

lsof -i tcp:3000 من المحطة الطرفية ، ابحث عن PID الخاص بالعملية

kill -9 PID

1
Shan

فيما يلي وظيفة باش المساعد لقتل عمليات متعددة بالاسم أو المنفذ

fkill() {
  for i in [email protected];do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
  else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
  xargs [email protected] sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

الاستعمال:

$ fkill [process name] [process port]

مثال:

$ fkill someapp :8080 node :3333 :9000
1
Miguel Mota

يجب أن تحاول هذا ، وهذه التقنية هي نظام التشغيل المستقل.

يوجد في التطبيق الخاص بك مجلد يسمى tmp ، يوجد داخله مجلد آخر يسمى pids. يحتوي هذا الملف على ملف معرف الخادم. ببساطة حذف هذا الملف. ميناء تقتل نفسها تلقائيا.

أعتقد أن هذه هي الطريقة السهلة.

1
Arun P

يمكنك تجربة هذا

netstat -vanp tcp | grep 3000
0
Foram Thakral

إذا كنت تريد طريقة حرة رمز - فتح مدير النشاط وقوة عقدة القتل :)

0
Hannah Louisa Carney

استخدم الأمر التالي لقتل العملية على المنفذ 3000 kill $(lsof -t -i:3000)

0
vinayb21