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

1378
04 окт. '10 в 15:19
источник поделиться
30 ответов
  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
    
2273
04 окт. '10 в 15:48
источник

Связанные вопросы


Похожие вопросы

Поиск:

[sudo] lsof -i :3000

Убить:

kill -9 <PID>
1464
09 сент. '13 в 23:58
источник

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

Run:

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

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

ps ax | grep <PID>

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

kill -QUIT <PID>
142
07 марта '13 в 23:24
источник

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

lsof -ti:3000 | xargs kill

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

117
06 авг. '16 в 0:03
источник

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

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

93
04 окт. '10 в 15:36
источник

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

lsof -n -i4TCP:3000 

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

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

kill -9 "PID"

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

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

55
28 дек. '17 в 7:21
источник

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

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

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

54
16 мая '13 в 12:17
источник

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

npx kill-port 3000

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

npx fkill-cli


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

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

52
02 июля '18 в 1:03
источник
lsof -P | grep ':3000' | awk '{print $2}'

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

34
04 авг. '12 в 0:14
источник

Одним из способов уничтожения процесса в порту является использование библиотеки 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
27
13 февр. '16 в 1:14
источник

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

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

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

27
23 июня '16 в 21:15
источник

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

netstat -vanp tcp | grep 3000

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

kill $(lsof -t -i :3000)

25
12 сент. '18 в 7:36
источник

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

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

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

kill -9 'PID'

22
17 июля '16 в 14:10
источник

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

lsof -ti:3000 | xargs kill
21
29 нояб. '18 в 9:06
источник

Найди и убей:

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

kill -9 $(lsof -ti tcp:3000)
15
28 авг. '18 в 9:26
источник

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

верхний

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

пс

Команда 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 
13
29 янв. '17 в 14:34
источник

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

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" }

11
12 марта '19 в 10:02
источник

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

$ fkill :3000
5
18 апр. '18 в 21:31
источник

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

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

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

killTcpListen 8080

5
31 марта '18 в 15:17
источник

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
3
08 мая '18 в 19:17
источник

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

3
05 июня '18 в 8:04
источник

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

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

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

1
12 авг. '18 в 17:02
источник

Здесь вспомогательная функция 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
1
30 авг. '18 в 22:51
источник

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

0
10 февр. '19 в 17:13
источник

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

0
18 марта '19 в 10:19
источник

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

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

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

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

kill -9 PID

0
16 мая '19 в 13:48
источник

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

lsof -h

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

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

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

lsof -i :3000
0
29 окт. '17 в 20:55
источник

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

-1
08 сент. '18 в 11:45
источник

В Mac OS

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

-1
20 апр. '19 в 12:50
источник

Вы должны попробовать этот код с помощью терминала:

$ killall -9 ruby
-7
30 окт. '17 в 11:03
источник

Посмотрите другие вопросы по меткам или Задайте вопрос