Как я могу убить любой процесс, использующий порт 8080, чтобы я мог бродить?

93

В MacOSX я использую Packer для создания коробки Vagrant, поэтому мне нужно постоянно поднимать ее и разбирать. Я пытаюсь "бродить" и получаю стандартную ошибку, потому что порт уже используется:

«Vagrant не может перенаправить указанные порты на этой виртуальной машине, так как они могут столкнуться с каким-либо другим приложением, которое уже прослушивает эти порты. Перенаправленный порт на 8080 уже используется на хост-машине».

Решение кажется достаточно простым: мне просто нужно определить процесс, который удерживает порт 8080 открытым, и убить этот процесс, верно? Это не так просто.


Если я запустил команду:

nmap localhost -p 8080

Я получаю следующий вывод:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Если я запустил следующую команду:

top -o prt

Самый высокий порт в использовании в 1360 году


Если я запустил следующую команду:

 netstat -tulpn | grep :8080

Я получаю:

netstat: n: unknown or uninstrumented protocol

Если я запустил следующую команду:

lsof -i :8080

Я не получаю вывода


Если я перезапущу свой компьютер, порт теперь доступен, и я могу теперь «бродить».

Как я могу убить любой процесс, использующий порт 8080, чтобы я мог бродить, не перезагружая свой компьютер?

Джейсон Карран
источник

Ответы:

164

Это может помочь

lsof -n -i4TCP:8080 

PID - это второе поле вывода.

Или попробуйте:

lsof -i -P
Марк Сетчелл
источник
Спасибо за попытку, но в своем вопросе я сказал, что не получаю вывода от команды lsof.
Джейсон Карран
Я добавил еще одну возможность.
Марк Сетчелл
У вас случайно есть принтер HP LaserJet? blog.hgomez.net/blog/2010/09/25/…
Марк Сетчелл,
3
Спасибо, Марк! По какой-то причине после перезапуска моего компьютера команды lsof ничего не выводили, а теперь они и есть. Теперь все 3 команды lsof работают, и я могу определить идентификатор процесса и убить его с помощью: sudo kill -9 000 ... Где 000 - это идентификатор процесса. Имя процесса - «VBoxHeadless». Если я получу дополнительную информацию о том, почему это не работало ранее, я сообщу об этом. К вашему сведению: у меня нет принтера.
Джейсон Карран
Попробуйте sudo lsof -n -i4TCP:8080подобрать процессы, принадлежащие root.
mpelzsherman 02
90

Быстрое и быстрое решение:

lsof -n -i4TCP:8080

PIDэто второе поле. Затем убейте этот процесс:

kill -9 PID

Менее быстрое, но постоянное решение

  1. Перейти к /usr/local/bin/ (можно использовать command + shift + g в Finder)

  2. Создайте файл с именем stop. Вставьте в него приведенный ниже код:

#!/bin/bash
touch temp.text
lsof -n -i4TCP:$1 | awk '{print $2}' > temp.text
pidToStop=`(sed '2q;d' temp.text)`
> temp.text
if [[ -n $pidToStop ]]
then
kill -9 $pidToStop
echo "Congrates!! $1 is stopped."
else
echo "Sorry nothing running on above port"
fi
rm temp.text
  1. Сохраните этот файл.
  2. Сделайте файл исполняемым chmod 755 stop
  3. Теперь перейдите в терминал и напишите stop 8888(или любой порт)
Ронак Котари
источник
4
Я попробовал постоянное решение, но при попытке запустить сценарий получил сообщение «Permission denied». Решено первым запуском chmod 755 stop.
nomadoda
32

Если принятый выше ответ не сработал, попробуйте следующее решение. Вы можете использовать его для порта 8080 или для любых других портов.

sudo lsof -i tcp:3000 

Замените 3000 любым нужным портом. Выполните команду ниже, чтобы убить этот процесс.

sudo kill -9 PID

PID - это идентификатор процесса, который нужно убить.

Ниже приведен вывод команд в Терминале Mac.

Вывод команды

Акшай Торве
источник
1
Я бы сначала попробовал обычное убийство (не -9). Параметр -9 может привести к неправильному закрытию сокета. Процесс может быть остановлен, но вместо него будет создан другой слушатель.
stackPusher
6

Чтобы написать сценарий:

pid=$(lsof -ti tcp:8080)
if [[ $pid ]]; then
  kill -9 $pid
fi

-tАргумент делает вывод LSOF «скупой» , что означает , что она только возвращает PID.

вутазавр
источник
1
вы также можете заставить его функционировать, который требует $ port
мебада
Наконец, решение, которое напрямую получает PID. Спасибо, человек, должен быть правильный ответ на эту тему
Olympiloutre
3

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

sudo lsof -i :80 # checks port 8080

Тогда я получил

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
acwebseca 312 root   36u  IPv4 0x34ae935da20560c1      0t0  TCP 192.168.1.3:50585->104.25.53.12:http (ESTABLISHED)

показать, какая служба использует PID

ps -ef 312

Тогда я получил это

  UID   PID  PPID   C STIME   TTY           TIME CMD
    0   312    58   0  9:32PM ??         0:02.70 /opt/cisco/anyconnect/bin/acwebsecagent -console

Чтобы удалить агент веб-безопасности cisco, запустите

sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

кредиты: http://tobyaw.livejournal.com/315396.html

Mjabadilla
источник
2

Это может быть Cisco AnyConnect. Проверьте, существует ли /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist. Затем выгрузите его с помощью launchctl и удалите из / Library / LaunchDaemons

Андрей Силка
источник
2
sudo lsof -i:8080

Выполнив указанную выше команду, вы можете увидеть, какие все задания выполняются.

kill -9 <PID Number>

Введите PID (идентификационный номер процесса), чтобы завершить / убить экземпляр.

Висвесвар Секар
источник
1

Вы также можете использовать Activity Monitor для идентификации и выхода из процесса, использующего порт.

Gcmori
источник
1
Как мне это сделать?
Emil Stenström
В MacOSX: Монитор активности> Сеть> сортировка по PID> найдите заблокированный порт (например, 8080, 5000 и т. Д.)> Щелкните значок «X» в верхнем левом углу> подтвердите, что хотите выйти из процесса. Может быть хорошей идеей отредактировать конфигурацию запуска / сборки, чтобы гарантировать, что могут быть созданы только отдельные экземпляры сервера, то есть используемые вами порты освобождаются при разрыве.
Alex Friedmann
1

Запустите: nmap -p 8080 localhost(Установите nmap с MacPorts или Homebrew, если у вас его еще нет в вашей системе)

Отчет о сканировании Nmap для localhost (127.0.0.1)

Хост работает (задержка 0,00034 с).

Другие адреса для localhost (не проверяются): :: 1

ПОРТОВАЯ ГОСУДАРСТВЕННАЯ СЛУЖБА

8080 / tcp открыть http-прокси

Бегать: ps -ef | grep http-proxy

UID PID PPID C STIME TTY TIME CMD

640 99335 88310 0 12:26 вечера ttys002 0: 00.01 grep http-proxy "

Выполнить: ps -ef 640(замените 501 своим UID)

/System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd

Порт 8080 в mac osx используется чем-то, установленным с XCode SDK

Yiling
источник
1

Используйте следующую команду:

lsof -n -i4TCP:8080 | awk '{print$2}' | xargs kill -9

Идентификатор процесса порта 8080 будет выбран и принудительно уничтожен с использованием kill -9.

Сунити
источник
0

попробуйте netstat

netstat -vanp tcp | grep 3000

если ваш netstat не поддерживает -p, используйте lsof

sudo lsof -i tcp:3000 

Для Centos 7 используйте

netstat -vanp --tcp | grep 3000
Кхем Радж Регми
источник