Wie kann ich jeden Prozess beenden, der Port 8080 verwendet, damit ich mich aufhalten kann?


91

Unter MacOSX verwende ich Packer, um eine Vagrant-Box zu erstellen, daher muss ich sie kontinuierlich aufrufen und abreißen. Ich versuche, mich zu "vagabundieren" und erhalte den Standardfehler, weil der Port verwendet wird:

"Vagrant kann die angegebenen Ports auf dieser VM nicht weiterleiten, da sie mit einer anderen Anwendung kollidieren würden, die diese Ports bereits überwacht. Der weitergeleitete Port an 8080 wird bereits auf dem Hostcomputer verwendet."

Die Lösung scheint einfach zu sein: Ich muss nur den Prozess identifizieren, der Port 8080 offen hält, und diesen Prozess beenden, oder? Es ist nicht so leicht.


Wenn ich den Befehl ausführe:

nmap localhost -p 8080

Ich erhalte folgende Ausgabe:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Wenn ich den folgenden Befehl ausführe:

top -o prt

Der höchste Hafen, der 1360 benutzt wurde


Wenn ich den folgenden Befehl ausführe:

 netstat -tulpn | grep :8080

Ich erhalte:

netstat: n: unknown or uninstrumented protocol

Wenn ich den folgenden Befehl ausführe:

lsof -i :8080

Ich erhalte keine Ausgabe


Wenn ich meinen Computer neu starte, ist der Port jetzt verfügbar und ich kann jetzt "vagabundieren".

Wie kann ich jeden Prozess beenden, der Port 8080 verwendet, damit ich mich ohne Neustart meines Computers aufhalten kann?

Antworten:


162

Dies könnte helfen

lsof -n -i4TCP:8080 

Die PID ist das zweite Feld in der Ausgabe.

Oder Versuche:

lsof -i -P

Vielen Dank für den Versuch, aber ich habe in meiner Frage angegeben, dass ich keine Ausgabe vom Befehl lsof erhalte.
Jason Curran

Ich habe eine weitere Möglichkeit hinzugefügt.
Mark Setchell

Haben Sie zufällig einen HP LaserJet-Drucker? blog.hgomez.net/blog/2010/09/25/…
Mark Setchell

3
Danke Mark! Aus irgendeinem Grund haben die lsof-Befehle nach dem Neustart meines Computers nichts ausgegeben, und jetzt sind sie es. Jetzt funktionieren alle drei lsof-Befehle und ich kann die Prozess-ID identifizieren und beenden mit: sudo kill -9 000 ... Wobei 000 die Prozess-ID ist. Der Name des Prozesses lautet "VBoxHeadless". Wenn ich weitere Informationen darüber erhalte, warum es zuvor nicht funktioniert hat, melde ich mich zurück. Zu Ihrer Information: Ich habe keinen Drucker angeschlossen.
Jason Curran

Versuchen Sie sudo lsof -n -i4TCP:8080, Prozesse aufzunehmen, die root gehören.
mpelzsherman

87

Schnelle und schnelle Lösung:

lsof -n -i4TCP:8080

PIDist das zweite Feld. Dann töte diesen Prozess:

kill -9 PID

Weniger schnelle aber dauerhafte Lösung

  1. Gehe zu /usr/local/bin/ (Kann Befehl + Umschalt + g im Finder verwenden)

  2. Erstellen Sie eine Datei mit dem Namen stop. Fügen Sie den folgenden Code ein:

#!/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. Speichern Sie diese Datei.
  2. Machen Sie die Datei ausführbar chmod 755 stop
  3. Gehen Sie jetzt zum Terminal und schreiben Sie stop 8888(oder einen beliebigen Port)

4
Ich habe die permanente Lösung ausprobiert, aber beim Versuch, das Skript auszuführen, wurde die Berechtigung verweigert. Gelöst durch erstes Ausführen chmod 755 stop.
Nomadoda

32

Falls die oben akzeptierte Antwort nicht funktioniert hat, versuchen Sie es mit der folgenden Lösung. Sie können es für Port 8080 oder für andere Ports verwenden.

sudo lsof -i tcp:3000 

Ersetzen Sie 3000 durch den gewünschten Anschluss. Führen Sie den folgenden Befehl aus, um diesen Prozess abzubrechen.

sudo kill -9 PID

PID ist die Prozess-ID, die Sie beenden möchten.

Unten sehen Sie die Ausgabe von Befehlen auf dem Mac Terminal.

Befehlsausgabe


1
Ich würde zuerst versuchen, regelmäßig zu töten (nicht -9). Die Option -9 kann dazu führen, dass der Socket nicht richtig geschlossen wird. Der Prozess kann abgebrochen werden, aber ein anderer Zuhörer wird an seiner Stelle gegabelt.
stackPusher

6

So schreiben Sie Folgendes:

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

Das -tArgument macht die Ausgabe von lsof "knapp", was bedeutet, dass nur die PID zurückgegeben wird.


1
Sie können es auch funktionieren lassen, die $ port
mebada

Endlich eine Lösung, die die PID direkt erhält. Danke Mann, sollte die richtige Antwort auf diesen Thread sein
Olympiloutre

3

Ich musste diesen Befehl ausführen

sudo lsof -i :80 # checks port 8080

Dann habe ich

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)

Zeigen Sie an, welcher Dienst die PID verwendet

ps -ef 312

Dann habe ich das bekommen

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

Um den Cisco Web Security Agent zu deinstallieren, führen Sie ihn aus

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

Credits an: http://tobyaw.livejournal.com/315396.html


2

Dies kann Cisco AnyConnect sein. Überprüfen Sie, ob /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist vorhanden ist. Entladen Sie es dann mit launchctl und löschen Sie es aus / Library / LaunchDaemons


2
sudo lsof -i:8080

Wenn Sie den obigen Befehl ausführen, können Sie sehen, welche Jobs ausgeführt werden.

kill -9 <PID Number>

Geben Sie die PID (Prozessidentifikationsnummer) ein, damit die Instanz beendet / beendet wird.


1

Sie können den Aktivitätsmonitor auch verwenden, um den Prozess über den Port zu identifizieren und zu beenden.


1
Wie würde ich das machen?
Emil Stenström

Unter MacOSX: Aktivitätsmonitor> Netzwerk> Nach PID sortieren> Blockierten Port suchen (z. B. 8080, 5000 usw.)> Klicken Sie oben links auf "X"> Bestätigen Sie, dass Sie den Vorgang beenden möchten. Möglicherweise ist es eine gute Idee, Ihre Run / Build-Konfiguration zu bearbeiten, um sicherzustellen, dass nur einzelne Serverinstanzen erstellt werden können, dh Ihre verwendeten Ports werden beim Herunterfahren freigegeben.
Alex Friedmann

1

Ausführen: nmap -p 8080 localhost(Installieren Sie nmap mit MacPorts oder Homebrew, wenn Sie es noch nicht auf Ihrem System haben.)

Nmap-Scan-Bericht für localhost (127.0.0.1)

Host ist aktiv (0,00034s Latenz).

Andere Adressen für localhost (nicht gescannt): :: 1

PORT STATE SERVICE

8080 / tcp http-Proxy öffnen

Lauf: 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 "

Ausführen: ps -ef 640(501 durch Ihre UID ersetzen)

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

Port 8080 auf Mac OSX wird von etwas verwendet, das mit XCode SDK installiert wurde


1

Verwenden Sie den folgenden Befehl:

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

Die Prozess-ID von Port 8080 wird mit Gewalt ausgewählt und beendet kill -9.


0

versuche netstat

netstat -vanp tcp | grep 3000

Wenn Ihr Netstat -p nicht unterstützt, verwenden Sie lsof

sudo lsof -i tcp:3000 

Für Centos 7 verwenden

netstat -vanp --tcp | grep 3000
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.