Как я могу убить любой процесс, использующий порт 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


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 для идентификации и выхода из процесса, использующего порт.


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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.