Jak mogę zabić jakikolwiek proces używający portu 8080, abym mógł się włóczyć w górę?


93

Na MacOSX używam Packera do budowy Vagranta, więc muszę go ciągle podnosić i burzyć. Próbuję `` wędrować w górę '' i otrzymuję standardowy błąd, ponieważ port jest używany:

„Vagrant nie może przekazywać określonych portów na tej maszynie wirtualnej, ponieważ kolidowałyby one z inną aplikacją, która już nasłuchuje na tych portach. Przekierowany port do 8080 jest już używany na maszynie hosta”.

Rozwiązanie wydaje się dość proste: po prostu muszę zidentyfikować proces, który utrzymuje otwarty port 8080 i zabić ten proces, prawda? To nie jest takie proste.


Jeśli uruchomię polecenie:

nmap localhost -p 8080

Otrzymuję następujący wynik:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Jeśli uruchomię następujące polecenie:

top -o prt

Najwyższy używany port w 1360 roku


Jeśli uruchomię następujące polecenie:

 netstat -tulpn | grep :8080

Otrzymałem:

netstat: n: unknown or uninstrumented protocol

Jeśli uruchomię następujące polecenie:

lsof -i :8080

Nie otrzymuję żadnego wyjścia


Jeśli ponownie uruchomię komputer, port jest teraz dostępny i mogę teraz „wędrować”.

Jak mogę zabić dowolny proces używający portu 8080, aby móc wędrować bez ponownego uruchamiania komputera?

Odpowiedzi:


164

To może pomóc

lsof -n -i4TCP:8080 

PID to drugie pole w danych wyjściowych.

Lub spróbuj:

lsof -i -P

Dziękuję za próbę, ale stwierdziłem w moim pytaniu, że nie otrzymuję danych wyjściowych z polecenia lsof.
Jason Curran

Dodałem inną możliwość.
Mark Setchell

Czy masz drukarkę HP LaserJet? blog.hgomez.net/blog/2010/09/25/…
Mark Setchell

3
Dzięki Mark! Z jakiegoś powodu po ponownym uruchomieniu komputera polecenia lsof nic nie wyświetlały, a teraz są. Teraz wszystkie 3 z poleceń lsof działają i mogę zidentyfikować identyfikator procesu i zabić go: sudo kill -9 000 ... Gdzie 000 to identyfikator procesu. Nazwa procesu to „VBoxHeadless”. Jeśli otrzymam więcej informacji o tym, dlaczego wcześniej nie działało, odpowiem. FYI: Nie mam podłączonej drukarki.
Jason Curran

Spróbuj sudo lsof -n -i4TCP:8080odebrać procesy należące do roota.
mpelzsherman

90

Szybkie i szybkie rozwiązanie:

lsof -n -i4TCP:8080

PIDto drugie pole. Następnie zakończ ten proces:

kill -9 PID

Mniej szybkie, ale trwałe rozwiązanie

  1. Idź do /usr/local/bin/ (można użyć polecenia + shift + g w wyszukiwarce)

  2. Utwórz plik o nazwie stop. Wklej w nim poniższy kod:

#!/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. Zapisz ten plik.
  2. Spraw, aby plik był wykonywalny chmod 755 stop
  3. Teraz przejdź do terminala i napisz stop 8888(lub dowolny port)

4
Wypróbowałem trwałe rozwiązanie, ale podczas próby uruchomienia skryptu otrzymałem komunikat „Odmowa uprawnień”. Rozwiązany przez pierwsze uruchomienie chmod 755 stop.
nomadoda

32

Jeśli powyższa odpowiedź nie zadziała, wypróbuj poniższe rozwiązanie. Możesz go użyć dla portu 8080 lub dowolnego innego portu.

sudo lsof -i tcp:3000 

Zastąp 3000 dowolnym portem, który chcesz. Uruchom poniższe polecenie, aby zabić ten proces.

sudo kill -9 PID

PID to identyfikator procesu, który chcesz zabić.

Poniżej znajduje się wyjście poleceń w terminalu Mac.

Wyjście polecenia


1
spróbuję najpierw zwykłego zabicia (nie -9). Opcja -9 może spowodować, że gniazdo nie zostanie poprawnie zamknięte. Proces może zostać zabity, ale w jego miejsce rozwidli się inny słuchacz.
stackPusher

6

Aby to napisać:

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

-tArgument ma wyjście lsof „lakoniczny”, co oznacza, że tylko ona zwraca PID.


1
możesz sprawić, by działał też, który
pobierze

Wreszcie rozwiązanie, które bezpośrednio pobiera PID. Dzięki stary, powinna być poprawną odpowiedzią na ten wątek
Olympiloutre

3

Musiałem uruchomić to polecenie

sudo lsof -i :80 # checks port 8080

Wtedy dostałem

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)

pokaż, która usługa używa PID

ps -ef 312

Wtedy dostałem to

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

Aby odinstalować agenta bezpieczeństwa WWW Cisco, uruchom

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

kredyty na: http://tobyaw.livejournal.com/315396.html


2

Może to być Cisco AnyConnect. Sprawdź, czy istnieje /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist. Następnie wyładuj go za pomocą launchctl i usuń z / Library / LaunchDaemons


2
sudo lsof -i:8080

Uruchamiając powyższe polecenie, możesz zobaczyć, jakie są uruchomione wszystkie zadania.

kill -9 <PID Number>

Wprowadź PID (numer identyfikacyjny procesu), co spowoduje zakończenie / zabicie instancji.


1

Możesz również użyć Monitora aktywności, aby zidentyfikować i zakończyć proces przy użyciu portu.


1
Jak miałbym to zrobić?
Emil Stenström

W systemie MacOSX: Monitor aktywności> Sieć> sortuj według PID> znajdź zablokowany port (np. 8080, 5000 itp.)> Kliknij lewy górny „X”> potwierdź, że chcesz zakończyć proces. Dobrym pomysłem może być zmodyfikowanie konfiguracji uruchamiania / kompilacji, aby mieć pewność, że można tworzyć tylko pojedyncze instancje serwera, tj. Używane porty są zwalniane po rozebraniu.
Alex Friedmann

1

Uruchom: nmap -p 8080 localhost(zainstaluj nmap z MacPorts lub Homebrew, jeśli jeszcze go nie masz w systemie)

Raport skanowania Nmapa dla hosta lokalnego (127.0.0.1)

Host działa (opóźnienie 0,00034 s).

Inne adresy hosta lokalnego (nie skanowane): :: 1

OBSŁUGA PAŃSTWA PORTU

8080 / tcp otwarty serwer proxy http

Biegać: ps -ef | grep http-proxy

UID PID PPID C CZAS CZASU CZAS CMD

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

Uruchom: ps -ef 640(zamień 501 na swój UID)

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

Port 8080 na Mac OSX jest używany przez coś zainstalowanego z XCode SDK


1

Użyj następującego polecenia:

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

Identyfikator procesu portu 8080 zostanie wybrany i zabity siłą przy użyciu kill -9.


0

spróbuj netstat

netstat -vanp tcp | grep 3000

jeśli twój netstat nie obsługuje -p, użyj lsof

sudo lsof -i tcp:3000 

Do użytku z Centos 7

netstat -vanp --tcp | grep 3000
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.