macos - مميزات - • ما الفرق بين نظام ماك ونظام ويندوز؟




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

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

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

عندما تفعل

rails server

انا حصلت

العنوان قيد الاستخدام - bind (2) (Errno :: EADDRINUSE)

تحديث 2014:

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


  1. يمكنك أن تجرب netstat

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

    sudo lsof -i tcp:3000 
    

أضف إلى ~/.bash_profile :

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

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

killTcpListen 8080


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

$ fkill :3000

تجد:

[sudo] lsof -i :3000

قتل:

kill -9 <PID>

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

lsof -ti:3000 | xargs kill

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


في .bash_profile الخاص بك ، قم بإنشاء اختصار terminate عملية 3000:

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

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


للقضاء بقوة على عملية كهذه ، استخدم الأمر التالي

lsof -n -i4TCP:3000 

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

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

kill -9 "PID"

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

بالنسبة إلى المثيل ، إذا أردت اقتطاع العملية التي تعمل على المنفذ 8080 ، فإليك الطريقة التي أقوم بها


واحدة من الطرق لقتل عملية على الميناء هي استخدام مكتبة 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

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

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


يمكنك استخدام الأمر

lsof -h

استخدام هذا الأمر للعثور على المنفذ هو

-i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]

في قضيتك أدخل

lsof -i :3000

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

هذا سوف يعطيك فقط pid ، اختبارها على MacOS.







process