Was kann unter Windows nach Port 8080 suchen und versuchen, den verwendeten Prozess über eine .BAT-Datei abzubrechen?
Was kann unter Windows nach Port 8080 suchen und versuchen, den verwendeten Prozess über eine .BAT-Datei abzubrechen?
Antworten:
Hier ist ein Befehl, mit dem Sie loslegen können:
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
Wenn Sie mit Ihrer Batch-Datei vertraut sind, entfernen Sie sie @ECHO
.
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
Beachten Sie, dass Sie dies möglicherweise für verschiedene Betriebssysteme geringfügig ändern müssen. Unter Windows 7 benötigen Sie beispielsweise möglicherweise tokens=5
anstelle von tokens=4
.
Wie das funktioniert
FOR /F ... %variable IN ('command') DO otherCommand %variable...
Auf diese Weise können Sie die command
Ausgabe ausführen und durchlaufen. Jede Zeile wird eingefügt %variable
und kann beliebig oft erweitert werden otherCommand
, wo immer Sie möchten. %variable
im tatsächlichen Gebrauch kann nur ein einzelner Buchstabe Name haben, z %V
.
"tokens=4 delims= "
Auf diese Weise können Sie jede Zeile nach Leerzeichen aufteilen, den 4. Block in dieser Zeile nehmen und ihn %variable
(in unserem Fall %%P
) einfügen . delims
sieht leer aus, aber dieser zusätzliche Platz ist tatsächlich von Bedeutung.
netstat -a -n -o
Führen Sie es einfach aus und finden Sie es heraus. Gemäß der Befehlszeilenhilfe werden "Alle Verbindungen und Überwachungsports angezeigt", "Adressen und Portnummern in numerischer Form angezeigt" und "Die jeder Verbindung zugeordnete Prozess-ID angezeigt". Ich habe diese Optionen nur verwendet, da jemand anderes sie vorgeschlagen hat und sie zufällig funktioniert haben :)
^|
Dies nimmt die Ausgabe des ersten Befehls oder Programms ( netstat
) und übergibt sie an ein zweites Befehlsprogramm ( findstr
). Wenn Sie dies direkt in der Befehlszeile anstelle einer Befehlszeichenfolge verwenden würden, würden Sie |
stattdessen verwenden ^|
.
findstr :8080
Dies filtert alle Ausgaben, die an sie übergeben werden, und gibt nur Zeilen zurück, die enthalten :8080
.
TaskKill.exe /PID <value>
Dadurch wird eine laufende Aufgabe unter Verwendung der Prozess-ID beendet.
%%P instead of %P
Dies ist in Batch-Dateien erforderlich. Wenn Sie dies an der Eingabeaufforderung tun würden, würden Sie %P
stattdessen verwenden.
HELP FOR
auf der Kommandozeile eine Menge anderer Möglichkeiten , um zu sehen , die FOR
Sie geben, und prüfen Sie netstat -?
, findstr /?
und TaskKill /?
noch mehr Hilfe.
tokens=4
ist Windows XP, denke ich, und tokens=5
Windows 7. Auch eine gute Idee, /F
um den Kill zu erzwingen.
Öffnen Sie die Eingabeaufforderung und führen Sie die folgenden Befehle aus
C:\Users\username>netstat -o -n -a | findstr 0.0:3000
TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 3116
C:\Users\username>taskkill /F /PID 3116
, hier ist 3116 die Prozess-ID
Um einen bestimmten Prozess in der Befehlszeile zu finden, verwenden Sie den folgenden Befehl. 8080 ist der vom Prozess verwendete Port
netstat -ano | findstr 8080
Um den Prozess zu beenden, verwenden Sie den folgenden Befehl. 21424 ist die Prozess-ID
taskkill /pid 21424 /F
Durch die Verwendung der Merlyn-Lösung wurden andere Anwendungen wie Firefox beendet. Diese Prozesse verwendeten denselben Port, jedoch nicht als Listener:
z.B:
netstat -a -n -o | findstr :8085
TCP 0.0.0.0:8085 0.0.0.0:0 LISTENING 6568
TCP 127.0.0.1:49616 127.0.0.1:8085 TIME_WAIT 0
TCP 127.0.0.1:49618 127.0.0.1:8085 TIME_WAIT 0
Sie können diese daher ausschließen, indem Sie dem findstr wie folgt "LISTENING" hinzufügen:
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
Gehen Sie wie folgt vor, um alle auf Port 8080 ausgeführten Prozesse aufzulisten.
netstat -ano | finde "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612
TCP [::]:8080 [::]:0 LISTENING 10612
Führen Sie dann den folgenden Befehl aus, um den Prozess abzubrechen
Taskkill / F / PID 10612
Vielen Dank an alle, nur um hinzuzufügen, dass einige Prozesse nicht geschlossen werden, es sei denn, der / F-Force-Schalter wird auch mit TaskKill gesendet. Auch mit / T-Schalter werden alle sekundären Threads des Prozesses geschlossen.
C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^| findstr :2002') DO TaskKill.exe /PID %P /T /F
Für Dienste ist es erforderlich, den Namen des Dienstes abzurufen und Folgendes auszuführen:
sc stop ServiceName
Nur zur Vervollständigung:
Ich wollte alle Prozesse beenden, die mit einem bestimmten Port verbunden sind, aber nicht den Prozess, der abhört
Der Befehl (in cmd-Shell) für den Port 9001 lautet:
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr :
netstat :
Es funktioniert, weil netstat den Quellport, dann den Zielport und dann ESTABLISHED druckt
Erstellt eine Bat-Datei mit dem folgenden Inhalt, akzeptiert sie die Eingabe für die Portnummer
@ECHO ON
set /p portid=Enter the Port to be killed:
echo %portid%
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr %portid% ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
Klicken Sie abschließend auf "Enter", um den Vorgang zu beenden.
Wenn Sie den Prozess beenden möchten, der Port 8080 überwacht, können Sie PowerShell verwenden. Kombinieren Get-NetTCPConnection
Sie einfach Cmdlet mit Stop-Process
.
Getestet und sollte mit PowerShell 5 unter Windows 10 oder Windows Server 2016 funktionieren. Ich denke jedoch, dass es auch mit älteren Windows-Versionen funktionieren sollte, auf denen PowerShell 5 installiert ist.
Hier ist ein Beispiel:
PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Ähnlich wie Merlyns Antwort, aber diese behandelt auch diese Fälle:
Hier ist es:
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
Schritte:
Wechseln Sie in den conf
Ordner Ihres Apache Tomcat- Servers. In meinem Fall ist es so, apache-tomcat-7.0.61\conf
wie ich Apache-Tomcat-7.0.61 verwende
Öffnen Sie server.xml
die Portnummer und ändern Sie sie nach Ihren Wünschen von 8080 auf einen anderen Port. Zum Beispiel: 8081,8082,8087 usw.
Gehen Sie nun zum bin
Ordner und führen Sie ihn ausshutdown.bat
Starten Sie nun den Server über Eclipse neu.
Jetzt funktioniert Ihr Projekt ohne Unterbrechung.
Wenn jemand nach einem Powershell-Skript sucht:
function Search-And-Destroy
{
param ( [Parameter(Mandatory=$true)][string]$port )
$lines = netstat -a -o -n | findstr $port
$ports = @()
ForEach($line In $lines)
{
$res = $($lines -split '\s+')
$ports += $res[5]
}
$ports = $ports | select -uniq
ForEach($port In $ports)
{
echo $(taskkill /F /PID $port)
}
}
Diese Funktion macht im Grunde das, was die oben genannten Funktionen tun, aber sie hat das Powershell-Skriptformat, sodass Sie sie Ihrem Powershell-Profil hinzufügen können. Um den Standort Ihres Profils zu finden, gehen Sie zu Powershell und geben Sie einecho $profile
netstat
Tool.
Fügen Sie dies in die Befehlszeile ein
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
Wenn Sie es in einer Batch-Pu %%P
anstelle von verwenden möchten%P
netstat
Tool in andere Sprachen übersetzt wurde
Wenn Sie nach System sind, können Sie die Aufgabe nicht beenden. Versuchen Sie diesen Befehl
x:> net stop http / y