Найти (и убить) процесс блокировки порта 3000 на Mac

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

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

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

rails server

я получил

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

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

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

Ответ 1

  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
    

Ответ 2

Поиск:

[sudo] lsof -i :3000

Убить:

kill -9 <PID>

Ответ 3

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

Run:

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

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

ps ax | grep <PID>

наконец, "изгоните его":

kill -QUIT <PID>

Ответ 4

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

lsof -ti:3000 | xargs kill

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

Ответ 5

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

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

Ответ 6

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

npx kill-port 3000

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

npx fkill-cli


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

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

Ответ 7

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

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

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

Ответ 8

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

lsof -n -i4TCP:3000 

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

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

kill -9 "PID"

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

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

Ответ 9

Самое простое решение:

Для одного порта:

kill $(lsof -ti:3000)  //3000 is the port to be freed

Убить несколько портов с помощью однострочной команды:

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

lsof -ti:3000

82500 (идентификатор процесса)

lsof -ti:3001

82499

lsof -ti:3001,3000

82499 82500

kill $(lsof -ti:3001,3000)

Завершает процессы 82499 и 82500 одной командой.

Вы также можете использовать это в скриптах package.json:

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

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

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

Ответ 13

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

netstat -vanp tcp | grep 3000

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

kill $(lsof -t -i :3000)

Ответ 14

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

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

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

kill -9 'PID'

Ответ 15

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

lsof -ti:3000 | xargs kill

Ответ 16

Найди и убей:

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

kill -9 $(lsof -ti tcp:3000)

Ответ 17

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

верхний

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

пс

Команда 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 

Ответ 18

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

kill -9 PID - убьет процесс

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

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

kill -9 PID

Ответ 19

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

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

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

killTcpListen 8080

Ответ 20

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

$ fkill :3000

Ответ 21

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, вы можете автоматически -t процесс:

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

Ответ 22

Эти две команды помогут вам найти и убить процесс сервера

  1. lsof -wni tcp: 3000
  2. убить -9 pid

Ответ 23

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

Ответ 24

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

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

Я думаю, что это простой способ.

Ответ 25

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

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

Ответ 26

вы можете использовать команду

lsof -h

Использование этой команды для поиска порта

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

В вашем случае введите

lsof -i :3000

Ответ 27

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

Ответ 28

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

Ответ 29

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

netstat -vanp tcp | grep 3000

Ответ 30

Я использую это:

cat tmp/pids/server.pid | pbcopy

затем kill -9 'paste'