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

27 голосов
/ 13 февраля 2016

Один из способов уничтожить процесс в порту - использовать библиотеку 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
26 голосов
/ 12 сентября 2018

Чтобы просмотреть процессы, блокирующие порт:

netstat -vanp tcp | grep 3000

Чтобы убить процессы, блокирующие порт:

kill $(lsof -t -i :3000)

23 голосов
/ 17 июля 2016

Найти открытое соединение

lsof -i -P | grep -i "слушай"

Убить по идентификатору процесса

kill -9 'PID'

21 голосов
/ 29 ноября 2018

Найти PID и убить процесс.

lsof -ti:3000 | xargs kill
18 голосов
/ 28 августа 2018

Найди и убей:

Эта единственная командная строка проста и работает правильно.

kill -9 $(lsof -ti tcp:3000)
15 голосов
/ 12 марта 2019

Самое простое решение : уничтожить несколько портов с помощью одной строки.

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

kill $ (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" }

14 голосов
/ 29 января 2017

Возможные способы достижения этого:

top

Команда top - это традиционный способ просмотреть использование ресурсов вашей системы и увидеть процессы, которые занимаютсябольшинство системных ресурсов.Вверху отображается список процессов, в котором те, которые используют наибольшее количество процессоров, находятся вверху.

ps

Команда ps выводит список запущенных процессов.Следующая команда выводит список всех процессов, запущенных в вашей системе:

ps -A

Вы также можете направить вывод через grep для поиска определенного процесса без использования каких-либо других команд.Следующая команда будет искать процесс Firefox:

ps -A | grep firefox

Наиболее распространенный способ передачи сигналов в программу - команда kill.

kill PID_of_target_process

lsof

Список всех открытых файлов и процессов, которые их открыли.

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

или

 lsof -i tcp:3000 
5 голосов
/ 31 марта 2018

Добавить к ~/.bash_profile:

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

Затем source ~/.bash_profile и запустить

killTcpListen 8080

5 голосов
/ 18 апреля 2018

Используя sindresorhus fkill , вы можете сделать это:

$ fkill :3000
3 голосов
/ 05 июня 2018

Я сделал небольшую функцию для этого, добавьте ее в свой 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

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