Como posso matar qualquer processo que esteja usando a porta 8080 para que eu possa vagrant up?


97

No MacOSX, estou usando o Packer para construir uma caixa Vagrant, então preciso abri-la e destruí-la continuamente. Estou tentando 'vagrant up' e recebo o erro padrão porque a porta está em uso:

"O Vagrant não pode encaminhar as portas especificadas nesta VM, pois elas colidiriam com algum outro aplicativo que já está escutando nessas portas. A porta encaminhada para 8080 já está em uso na máquina host."

A solução parece bastante simples: eu só preciso identificar o processo que está mantendo a porta 8080 aberta e encerrar esse processo, certo? Não é tão fácil.


Se eu executar o comando:

nmap localhost -p 8080

Eu recebo a seguinte saída:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Se eu executar o seguinte comando:

top -o prt

A porta mais alta em uso em 1360


Se eu executar o seguinte comando:

 netstat -tulpn | grep :8080

Eu recebi:

netstat: n: unknown or uninstrumented protocol

Se eu executar o seguinte comando:

lsof -i :8080

Eu não recebo nenhuma saída


Se eu reiniciar meu computador, a porta estará disponível e eu posso 'vagar'.

Como posso matar qualquer processo que esteja usando a porta 8080 para que eu possa vagrant sem reiniciar meu computador?

Respostas:


172

Isso pode ajudar

lsof -n -i4TCP:8080 

O PID é o segundo campo da saída.

Ou tente:

lsof -i -P

Obrigado por tentar, mas declarei em minha pergunta que não recebo nenhuma saída do comando lsof.
— Jason Curran

Eu adicionei outra possibilidade.
— Mark Setchell

Por acaso você tem uma impressora HP LaserJet? blog.hgomez.net/blog/2010/09/25/…
— Mark Setchell

4
Obrigado Mark! Por alguma razão, depois de reiniciar meu computador, os comandos lsof não estavam gerando nada, e agora estão. Agora, todos os 3 dos comandos lsof estão funcionando e posso identificar o id do processo e eliminá-lo com: sudo kill -9 000 ... Onde 000 é o id do processo. O nome do processo é "VBoxHeadless". Se eu receber mais informações sobre o motivo pelo qual não estava funcionando anteriormente, farei um relatório. Para sua informação: não tenho impressora conectada.
— Jason Curran

Tente sudo lsof -n -i4TCP:8080selecionar processos pertencentes ao root.
— mpelzsherman

99

Solução rápida e rápida:

lsof -n -i4TCP:8080

PIDé o segundo campo. Em seguida, elimine esse processo:

kill -9 PID

Solução menos rápida, mas permanente

  1. Vá para /usr/local/bin/ (pode usar command + shift + g no localizador)

  2. Faça um arquivo chamado stop. Cole o código abaixo nele:

#!/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. Salve este arquivo.
  2. Torne o arquivo executável chmod 755 stop
  3. Agora, vá ao terminal e escreva stop 8888(ou qualquer porta)

4
Tentei a solução permanente, mas obtive 'Permissão negada' ao tentar executar o script. Resolvido na primeira execução chmod 755 stop.
— nomadoda

35

Caso a resposta aceita acima não funcione, tente a solução abaixo. Você pode usá-lo para a porta 8080 ou para qualquer outra porta.

sudo lsof -i tcp:3000 

Substitua 3000 pela porta que desejar. Execute o comando abaixo para encerrar esse processo.

sudo kill -9 PID

PID é o ID do processo que você deseja eliminar.

Abaixo está a saída dos comandos no Mac Terminal.

Saída de comando


1
Eu tentaria matar regular (não -9) primeiro. A opção -9 pode fazer com que o soquete não seja fechado corretamente. O processo pode ser eliminado, mas outro ouvinte será bifurcado em seu lugar.
— stackPusher

6

Para criar um script:

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

O -targumento torna a saída de lsof "concisa", o que significa que ele retorna apenas o PID.


1
você pode fazê-lo funcionar também,
— usando

Finalmente uma solução que obtém o PID diretamente. Obrigado cara, deve ser a resposta correta para este tópico
— Olympiloutre

3

Eu precisava executar este comando

sudo lsof -i :80 # checks port 8080

Então eu tenho

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)

mostrar qual serviço está usando o PID

ps -ef 312

Então eu peguei isso

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

Para desinstalar o agente de segurança da web da Cisco, execute

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

créditos para: http://tobyaw.livejournal.com/315396.html


3
sudo lsof -i:8080

Ao executar o comando acima, você pode ver quais são as tarefas em execução.

kill -9 <PID Number>

Digite o PID (número de identificação do processo), para encerrar / eliminar a instância.


2

Pode ser Cisco AnyConnect. Verifique se /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist existe. Em seguida, descarregue-o com launchctl e exclua de / Library / LaunchDaemons


1

Você também pode usar o Activity Monitor para identificar e encerrar o processo usando a porta.


1
Como eu faria isso?
— Emil Stenström

No MacOSX: Monitor de Atividade> Rede> classificar por PID> encontre sua porta bloqueada (por exemplo, 8080, 5000 etc)> clique em 'X' superior esquerdo> confirme que deseja sair do processo. Pode ser uma boa ideia editar sua configuração de execução / compilação para garantir que apenas instâncias de servidor únicas possam ser criadas, ou seja, suas portas usadas são liberadas na desmontagem.
— Alex Friedmann

1

Execute: nmap -p 8080 localhost(Instale o nmap com MacPorts ou Homebrew se ainda não o tiver em seu sistema)

Relatório de varredura Nmap para localhost (127.0.0.1)

O host está ativo (latência de 0,00034s).

Outros endereços para localhost (não verificado): :: 1

SERVIÇO DE ESTADO PORTUÁRIO

8080 / tcp aberto http-proxy

Corre: ps -ef | grep http-proxy

UID PID PPID C STIME TTY TIME CMD

640 99335 88310 0 12:26 pm ttys002 0: 00.01 grep http-proxy "

Execute: ps -ef 640(substitua 501 pelo seu UID)

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

A porta 8080 no mac osx é usada por algo instalado com o XCode SDK


1

Use o seguinte comando:

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

A identificação do processo da porta 8080 será selecionada e eliminada com força usando kill -9.


1

Eu precisava matar processos em portas diferentes, então criei um script bash:

killPort() {
  PID=$(echo $(lsof -n -i4TCP:$1) | awk 'NR==1{print $11}')
  kill -9 $PID
}

Basta adicionar isso ao seu .bashrc e executá-lo assim:

killPort 8080

Você pode passar qualquer número de porta que desejar


0

tente netstat

netstat -vanp tcp | grep 3000

se o seu netstat não suporta -p, use lsof

sudo lsof -i tcp:3000 

Para Centos 7 use

netstat -vanp --tcp | grep 3000
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.