Найти (и убить) процесс блокировки порта 3000 на Mac - PullRequest
1437 голосов
/ 04 октября 2010

Как мне найти (и уничтожить) процессы, которые прослушивают / используют мои порты tcp? Я на Mac OS X.

Иногда, после сбоя или некоторой ошибки, мое приложение rails блокирует порт 3000. Я не могу найти его с помощью ps -ef ...

При выполнении

rails server

Я получаю

Адрес уже используется - bind (2) (Errno :: EADDRINUSE)

2014 обновление:

Чтобы завершить некоторые из ответов ниже: После выполнения команд kill может потребоваться удаление файла pid rm ~/mypath/myrailsapp/tmp/pids/server.pid

Ответы [ 30 ]

2372 голосов
/ 04 октября 2010
  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
    
1507 голосов
/ 10 сентября 2013

Найти:

[sudo] lsof -i :3000

Убить:

kill -9 <PID>
154 голосов
/ 08 марта 2013

Ничто из вышеперечисленного не работает для меня.Любой другой с моим опытом может попробовать следующее (сработало для меня):

Выполнить:

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

, а затем проверить состояние сообщенного PID:

ps ax | grep <PID>

наконец, "смирись с этим":

kill -QUIT <PID>
123 голосов
/ 06 августа 2016

Однострочник для извлечения PID процесса с использованием порта 3000 и его уничтожения.

lsof -ti:3000 | xargs kill

Флаг -t удаляет все, кроме PID, из вывода lsof, что упрощает его уничтожение.

96 голосов
/ 04 октября 2010

Вы можете использовать lsof -i:3000.

То есть «Список открытых файлов».Это дает вам список процессов и какие файлы и порты они используют.

67 голосов
/ 02 июля 2018

Эту единственную командную строку легко запомнить:

npx kill-port 3000

Для более мощного инструмента с поиском:

npx fkill-cli


PS: они используют сторонние пакеты javascript. npx поставляется с Node.js.

Источники: твит | GitHub

56 голосов
/ 28 декабря 2017

Чтобы принудительно убить такой процесс, используйте следующую команду

lsof -n -i4TCP:3000 

Где 3000 - номер порта, на котором запущен процесс

возвращает идентификатор процесса (PID) и запустить

kill -9 "PID"

Замените PID на число, которое вы получите после выполнения первой команды

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

56 голосов
/ 16 мая 2013

В вашем .bash_profile создайте ярлык для terminate процесса 3000:

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

Затем позвоните $terminate, если он заблокирован.

34 голосов
/ 04 августа 2012
lsof -P | grep ':3000' | awk '{print $2}'

Это даст вам только pid, протестированный на MacOS.

27 голосов
/ 23 июня 2016

Выполнить в командной строке на OS-X El Captain:

kill -kill `lsof -t -i tcp:3000`

Краткая опция lsof возвращает только PID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...