Найти (и убить) процесс блокировки порта 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 ]

3 голосов
/ 08 мая 2018

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, чтобы показать только pid процессов, которые слушают.Комбинируя это с кратким форматом -t, вы можете автоматически завершить процесс:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
3 голосов
/ 16 мая 2019

lsof -i tcp:port_number - перечислит процесс, запущенный на этом порту

kill -9 PID - уничтожит процесс

, в вашем случае это будет

lsof -i tcp:3000 из вашего терминала найдите PID процесса

kill -9 PID

1 голос
/ 12 августа 2018

Вы должны попробовать это, этот метод не зависит от ОС.

В стороне вашего приложения есть папка tmp, внутри которой есть еще одна папка pids. Этот файл содержит файл pid сервера. Просто удалите этот файл. Порт автоматически убивает себя.

Я думаю, что это легкий путь.

1 голос
/ 30 августа 2018

Вот вспомогательная функция bash для уничтожения нескольких процессов по имени или порту

fkill() {
  for i in $@;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 -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Использование:

$ fkill [process name] [process port]

Пример:

$ fkill someapp :8080 node :3333 :9000
0 голосов
/ 04 июня 2019

Вы можете попробовать это

netstat -vanp tcp | grep 3000
0 голосов
/ 20 апреля 2019

В Mac OS

kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')

0 голосов
/ 18 марта 2019

Используйте следующую команду, чтобы завершить процесс на порту 3000 kill $(lsof -t -i:3000)

0 голосов
/ 30 октября 2017

Вы должны попробовать этот код, используя терминал:

$ killall -9 ruby
0 голосов
/ 10 февраля 2019

Если вам нужен свободный от кода код - откройте диспетчер активности и принудительно уничтожьте узел:)

0 голосов
/ 08 сентября 2018

Шаг 1: Найти работающий сервер: ps aux | grep puma Шаг 2: Убить этот сервер Kill -9 [номер сервера]

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