Wie kann ich den Prozess beenden, der derzeit einen Port auf localhost in Windows verwendet?

492

Wie kann ich den aktuellen Prozess / die aktuelle Anwendung entfernen, die bereits einem Port zugewiesen ist?

Zum Beispiel: localhost:8080

KavinduWije
quelle

Antworten:

1056

Schritt 1:

Öffnen Sie cmd.exe (Hinweis: Möglicherweise müssen Sie es als Administrator ausführen, dies ist jedoch nicht immer erforderlich), und führen Sie dann den folgenden Befehl aus:

netstat -ano | findstr :PORT_NUMBER

(Ersetzen Sie PORT_NUMBER durch die gewünschte Portnummer, behalten Sie jedoch den Doppelpunkt bei.)

Der rot eingekreiste Bereich zeigt die PID (Prozesskennung). Suchen Sie die PID des Prozesses, der den gewünschten Port verwendet.

Schritt 2:

Führen Sie als Nächstes den folgenden Befehl aus:

taskkill /PID PID /F

(Diesmal kein Doppelpunkt)

Zuletzt können Sie überprüfen, ob der Vorgang erfolgreich war oder nicht, indem Sie den Befehl in "Schritt 1" erneut ausführen. Wenn es erfolgreich war, sollten Sie keine weiteren Suchergebnisse für diese Portnummer sehen.

KavinduWije
quelle
funktioniert nicht. noch Prozess wird angezeigt
Hardik Mandankaa
16
Perfekt funktionieren. In meinem Fall lief Tomcat in Port 8080 und ich musste meine Spring-App erneut starten. i.imgur.com/aVwSYvR.png Vielen Dank.
Hugo LM
16
Ich musste Fluchtzeichen eingeben, wenn ich Taskkill ausführte:taskkill //PID 12552 //F
Robert
1
Die akzeptierte Antwort funktioniert nicht für Dienste, die so eingerichtet sind, dass sie bei einem Fehler neu
gestartet werden
1
Ich denke du meintest PID_NUMBER und nicht PORT_NUMBER intaskkill /PID PORT_NUMBER /F
Marcin Kulik
132

Schritt 1 (gleiche ist in akzeptierte Antwort geschrieben von KavinduWije ):

netstat -ano | findstr :yourPortNumber

Ändern Sie in Schritt 2 Folgendes:

tskill typeyourPIDhere 

Hinweis : taskkillFunktioniert in einigen Git-Bash-Terminals nicht

afsarkhan10182
quelle
1
fand es nicht für mich
Tzvi Gregory Kaidanov
1
@TzviGregoryKaidanov Welches Problem haben Sie?
afsarkhan10182
1
danke, es hat funktioniert, indem Taskkill in tskill geändert wurde
Md Shoaib Alam
1
Dies ist die Lösung, die für mich funktioniert hat. Ich benutze GIT Bash.
dxhans5
1
Kann dies erreicht werden, indem die Ausgabe des ersten Befehls an die zweite übergeben wird?
James
115

Mit Windows 10 Standardtools:

  • Schritt eins:

Öffnen Sie Windows PowerShell als Administrator

  • Schritt zwei:

PID (ProcessID) für Port 8080 suchen:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0 HÖREN 77777

  • Schritt drei:

Töte den Zombie-Prozess:

taskkill /f /pid 77777

Dabei ist "77777" Ihre PID

Duracell De Monaco
quelle
1
Wie kann der Prozess automatisiert und diese beiden Befehle in einer Bat-Datei kombiniert werden, wenn keine Möglichkeit besteht, die Cmd-Ausgabe anzuzeigen und dann manuell einen neuen Befehl zu schreiben?
Serob_b
3
@ Serob_b set /p port="Enter port: " -> -> FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine PID in Variable taskkill /f /pid %ProcessId%-> Tötet die Aufgabe cmd /k -> Sie das Fenster offen
Vikrant
94

Wenn Sie GitBash verwenden

Schritt eins:

netstat -ano | findstr :8080

Schritt zwei:

taskkill /PID typeyourPIDhere /F 

( /Fbeendet den Prozess mit Nachdruck)

Ara Yaghsizian
quelle
Double Slashed hat bei mir nicht
funktioniert
2
@ kylexy1357 versuchen Sie es mit einem einzigen Schrägstrich. Der "doppelte Schrägstrich" ist ein Fluchtzeichen vor dem /, das für einige Muscheln nicht benötigt wird
Robert
27

In Windows PowerShell Version 1 oder höher, um einen Prozess auf Port 3000 zu stoppen, geben Sie Folgendes ein:

Stop-Process (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force


Wie von @morganpdx vorgeschlagen, gibt es hier mehr PowerShell-ish, bessere Version:

Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000) .OwningProcess -Force

Schlafsaal
quelle
'Stop-Process' is not recognized as an internal or external command,
Grün
3
Ich finde, dass dies funktioniert:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
Morganpdx
1
@ Green Sie müssen den Befehl in Windows PowerShell
ausführen
1
Der erste Fehler war, dass seconf für mich gearbeitet hat
Tom
24

Zur Verwendung in der Befehlszeile:

for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a

Zur Verwendung in Fledermausdateien:

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
Mahesh Narwade
quelle
1
Wenn Sie es in einem .bat tun möchten, ersetzen Sie% a durch %% a
Mahesh Narwade
23

Wenn Sie die Portnummer bereits kennen, reicht es wahrscheinlich aus, ein Software-Beendigungssignal an den Prozess (SIGTERM) zu senden:

kill $(lsof -t -i :PORT_NUMBER)
Fremder
quelle
Wenn Sie wissen, dass der Port IPv4 verwendet, können Sie dies auch tun lsof -nt -i4TCP:9001.
Josh Habdas
10

Für Windows-Benutzer können Sie das CurrPorts- Tool verwenden, um verwendete Ports einfach zu beenden :

Geben Sie hier die Bildbeschreibung ein

Zuhair Taha
quelle
10

Ich habe zookeeper unter Windows ausgeführt und konnte ZooKeeper nicht mit zookeeper-stop.sh am 2181-Port stoppen. Deshalb habe ich diese Methode mit dem doppelten Schrägstrich "//" zum Taskkill ausprobiert. Es funktionierte

     1. netstat -ano | findstr :2181
       TCP    0.0.0.0:2181           0.0.0.0:0              LISTENING       8876
       TCP    [::]:2181              [::]:0                 LISTENING       8876

     2.taskkill //PID 8876 //F
       SUCCESS: The process with PID 8876 has been terminated.
getriebene_spinne
quelle
6

Wenn Sie Windows Terminal verwenden, ist der Vorgang zum Beenden möglicherweise etwas weniger langwierig. Ich habe Windows Terminal verwendet und kann kill PIDproblemlos Prozesse am Port beenden, da das neue Windows Terminal bestimmte Bash-Befehle unterstützt. Zum Beispiel:kill 13300

Der gesamte Prozess sieht also so aus:

  • Öffnen Sie das Windows-Terminal
  • Geben Sie den folgenden Befehl ein, um Prozesse anzuzeigen, die an dem Port ausgeführt werden, an dem Sie Prozesse beenden möchten. netstat -ano | findstr :PORT
  • Geben Sie Folgendes ein, um den Vorgang abzubrechen. kill PID

Zum Beispiel:

PS C:\Users\username> netstat -ano | findstr :4445
  TCP    0.0.0.0:4445           0.0.0.0:0              LISTENING       7368
  TCP    [::]:4445              [::]:0                 LISTENING       7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>

Sehen Sie, wann ich den ersten Befehl eingegeben habe, um Prozesse an dem Port aufzulisten, der leer zurückgegeben wurde. Das heißt, alle Prozesse werden jetzt beendet.

Lazycipher
quelle
Ich weiß, dass dies funktioniert, weil ich es getestet habe. Ich versuche, eine Dokumentation zu finden. Haben Sie welche?
DanStarns
@ DanStarns, ich habe bisher nur das gefunden! docs.microsoft.com/en-us/windows/terminal
Lazycipher
Vielen Dank für Ihre Zeit, es ist nicht ganz die Seite, die ich suche, eine Seite mit allen Funktionen, die im Terminal bereitgestellt werden, wie z kill. Ich werde hier posten, wenn ich finde.
DanStarns
1
Ich habe bis jetzt nicht viel darüber gefunden. Bitte posten Sie, wenn Sie etwas finden.
Lazycipher
4

Sie können dies tun, indem Sie eine Fledermausdatei ausführen:

@ECHO OFF                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
Flopcoder
quelle
4

Wenn Sie dies mit Python tun möchten: check Ist es in Python möglich, einen Prozess abzubrechen, der einen bestimmten Port überwacht, z. B. 8080?

Die Antwort von Smunk funktioniert gut. Ich wiederhole seinen Code hier:

from psutil import process_iter
from signal import SIGTERM # or SIGKILL

for proc in process_iter():
    for conns in proc.connections(kind='inet'):
        if conns.laddr.port == 8080:
            proc.send_signal(SIGTERM) # or SIGKILL
            continue
Kardi Teknomo
quelle
Dies funktionierte für einen Socket, der auch in Google Cloud eine bestimmte Portnummer verwendet! Vielen Dank
peevesy
0

Einzeilige Lösung mit GitBash :

 tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`

Ersetzen Sie 8080 durch den Port, den Ihr Server abhört.

Wenn Sie es häufig verwenden müssen, fügen Sie ~/.bashrcder Funktion Folgendes hinzu :

function killport() {
        tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}

und einfach laufen

killport 8080
Italo Borssatto
quelle
-1

Wir können dies vermeiden, indem wir IIS einfach mit dem folgenden Befehl neu starten:

IISRESET
ksrider 148
quelle