Wie können Sie herausfinden, welcher Prozess einen Port unter Windows überwacht?

2273

Wie können Sie herausfinden, welcher Prozess einen Port unter Windows überwacht?

Schreibgeschützt
quelle
3
Currports ist ein Tool, das hilft, zu suchen + zu filtern nirsoft.net/utils/cports.html
Blue Clouds
1
Ich bin darauf gestoßen, als ich versucht habe, Tomcat im Debug-Modus unter IntelliJ auszuführen. Die beste Lösung für mich war, die Debug-Transport-Konfiguration (Datei-> Einstellungen-> Build / exe / deploy-> Debugger) von "Socket" auf "Socket" zu ändern "geteilte Erinnerung".
TMN

Antworten:

2620

Neue Antwort, Powershell

Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess

Alte Antwort, cmd

 C:\> netstat -a -b

(Fügen Sie -n hinzu , um zu verhindern, dass versucht wird, Hostnamen aufzulösen, wodurch es viel schneller wird.)

Beachten Sie Danes Empfehlung für TCPView . Es sieht sehr nützlich aus!

-a Zeigt alle Verbindungen und Überwachungsports an.

-b Zeigt die ausführbare Datei an, die beim Erstellen jeder Verbindung oder jedes Überwachungsports beteiligt ist. In einigen Fällen hosten bekannte ausführbare Dateien mehrere unabhängige Komponenten, und in diesen Fällen wird die Reihenfolge der Komponenten angezeigt, die beim Erstellen der Verbindung oder des Überwachungsports beteiligt sind. In diesem Fall befindet sich der Name der ausführbaren Datei unten in [], oben die aufgerufene Komponente usw., bis TCP / IP erreicht wurde. Beachten Sie, dass diese Option zeitaufwändig sein kann und fehlschlägt, wenn Sie nicht über ausreichende Berechtigungen verfügen.

-n Zeigt Adressen und Portnummern in numerischer Form an.

-o Zeigt die jeder Verbindung zugeordnete Prozess-ID an.

Brad Wilson
quelle
252
-o um die PID zu bekommen
Laurent K
121
und taskkill / PID <pid>, um den Prozess zu beenden, gegebenenfalls mit / F.
BitMask777
81
Möglicherweise müssen Sie Ihre Befehlszeilen-Shell als Administrator ausführen, andernfalls wird möglicherweise eine Fehlermeldung über unzureichende Berechtigungen angezeigt. Verwenden Sie die Option "Als Administrator ausführen", wenn Sie mit der rechten Maustaste auf cmd.exe klicken.
Gruber
6
Funktioniert, erfordert jedoch eine erhöhte Erlaubnis. Umschalt + Rechtsklick auf Befehlssymbol -> Als Administrator ausführen
Christian Bongiorno
18
Wenn Sie die PID erhalten haben - sagen wir mal 1234-, können Sie tasklist /fi "pid eq 1234"den Namen und andere Details des Prozesses herausfinden.
Steve Chambers
2202

Es gibt eine native GUI für Windows:

  • Startmenü → Alle ProgrammeZubehörSystemprogrammeRessourcenmonitor

Oder Ausführen resmon.exe oder auf der Registerkarte Leistung des Task-Managers .

Geben Sie hier die Bildbeschreibung ein

bcorso
quelle
41
Zeigt auch den Firewall-Status der Bindung an (letzte Spalte). Sehr nützlich.
Raphael
8
Sie müssen Administrator (oder in dieser Gruppe) sein, um dies ausführen zu können.
KrishPrabakar
2
@bcorso, Was bedeutet die Bindung an " nicht angegebene Adresse "?
Pacerier
5
Kann auch über die Registerkarte Leistung des Task-Managers gestartet werden, zumindest in Windows 10. (Andere Versionen wurden nicht überprüft.)
Mathieu K.
10
Der obige Kommentar von @ user4836454 ist NICHT korrekt: Resource Monitor zeigt Ports mit Listenern an, auch wenn keine Netzwerkverbindung zu diesen Ports besteht. Schauen Sie sich einfach den Abschnitt "Listening Ports" anstelle des Abschnitts "TCP Connections" an.
Jpsy
235

Verwenden Sie TCPView, wenn Sie hierfür eine GUI benötigen . Es ist die alte Sysinternals- Anwendung, die Microsoft gekauft hat.

Däne
quelle
9
Dies ist meiner Meinung nach die beste Option, zumal sich alle Prozesse in derselben Liste befinden und Sie Prozesse direkt schließen können, indem Sie mit der rechten Maustaste darauf klicken.
Andreas Lundgren
8
Dies erfordert auch keine Administratorrechte!
Janac Meena
222

Für Windows:

netstat -aon | find /i "listening"
aku
quelle
25
+1 Beachten Sie jedoch, dass Sie das "Hören" des Muttersprachlers ändern müssen, wenn Ihr Fenster in einer anderen Sprache als Englisch ausgeführt wird. ZB netstat -aon | find /i "abhören"für Deutsch.
Levite
2
In meinem Fall hat es vielleicht wegen des Anführungszeichens nicht funktioniert, aber die Lösung netstat -aon | findstr LISTENING funktioniert perfekt!
Der Pate
Dies funktioniert, ohne dass erhöhte Berechtigungen erforderlich sind.
Vlad Schnakovszki
1
Ich erhalte eine Fehlermeldung beim Versuch, diesen Befehl auf W10 15063.729 mit PowerShell auszuführen:FIND: Parameter format not correct
Nicke Manarin
1
Wie ist diese Antwort relevant, um herauszufinden, welcher Prozess [Name] einen Port unter Windows überwacht?
Pawel Cioch
137

Für den in den meisten Antworten genannten Schalter -b müssen Sie über Administratorrechte auf dem Computer verfügen. Sie benötigen nicht wirklich erhöhte Rechte, um den Prozessnamen zu erhalten!

Suchen Sie die PID des Prozesses, der in der Portnummer ausgeführt wird (z. B. 8080).

netstat -ano | findStr "8080"

Suchen Sie den Prozessnamen anhand von pid

tasklist /fi "pid eq 2216"

Suchprozess über TCP / IP-Port

Ram Sharma
quelle
82

Weitere Informationen erhalten Sie, wenn Sie den folgenden Befehl ausführen:

netstat -aon | find /i "listening" |find "port"

Mit dem Befehl 'Suchen' können Sie die Ergebnisse filtern. find /i "listening"zeigt nur Ports an, die "Abhören". Beachten Sie, dass Sie den /iFall ignorieren müssen, andernfalls würden Sie find "LISTENING" eingeben. | find "port"beschränkt die Ergebnisse nur auf diejenigen, die die spezifische Portnummer enthalten. Beachten Sie, dass hierzu auch Ergebnisse gefiltert werden, deren Portnummer an einer beliebigen Stelle in der Antwortzeichenfolge steht.

Nathan24
quelle
8
Der Versuch von FWIW, dies in PowerShell v2.0 auszuführen, führt zu einem Fehler FIND: Parameter format not correct. Sie müssen nach den Suchkriterien ein Leerzeichen hinzufügen. Dies wird Sie mit verlassen netstat -aon | find /i "listening" | find "1234 ".
Selbst.
2
Ersetzen Sie "Port" oben durch Ihren Port, ex "5000"
jbooker
1
@selbst. Ich bekomme diesen Fehler mit PS 5.1 immer noch, auch nachdem ich das Leerzeichen nach der Pipe hinzugefügt habe. Weißt du was passiert?
Nicke Manarin
2
@NickeManarinin & @self wechseln entweder zuerst von Powershell zu cmd (geben Sie einfach cmd ein und drücken Sie die Eingabetaste, wiederholen Sie den Befehl) oder verwenden Sie in Powershell stattdessen diesen Befehl: netstat -aon | find / i " {back tick}" listening {back tick}"" | find " {back tick}" port {back tick}" "(<- beachte die entkommenen Zitate - entschuldige den Begriff, back tickda ich den tatsächlichen Charakter nicht hinzufügen kann, da er denkt, dass es ein Ausschnitt ist)
Tristan van Dam
72
  1. Öffnen Sie ein Eingabeaufforderungsfenster (als Administrator). Geben Sie im Feld "Start \ Search" "cmd" ein, klicken Sie mit der rechten Maustaste auf "cmd.exe" und wählen Sie "Als Administrator ausführen".

  2. Geben Sie den folgenden Text ein und drücken Sie die Eingabetaste.

    netstat -abno

    -a Zeigt alle Verbindungen und Überwachungsports an.

    -b Zeigt die ausführbare Datei an, die beim Erstellen jeder Verbindung oder jedes Überwachungsports beteiligt ist. In einigen Fällen hosten bekannte ausführbare Dateien mehrere unabhängige Komponenten, und in diesen Fällen wird die Reihenfolge der Komponenten angezeigt, die beim Erstellen der Verbindung oder des Überwachungsports beteiligt sind. In diesem Fall befindet sich der Name der ausführbaren Datei unten in [], oben in der aufgerufenen Komponente usw., bis TCP / IP erreicht wurde. Beachten Sie, dass diese Option zeitaufwändig sein kann und fehlschlägt, wenn Sie nicht über ausreichende Berechtigungen verfügen.

    -n Zeigt Adressen und Portnummern in numerischer Form an.

    -o Zeigt die jeder Verbindung zugeordnete Prozess-ID an.

  3. Suchen Sie den Port, den Sie abhören, unter "Lokale Adresse".

  4. Schauen Sie sich den Prozessnamen direkt darunter an.

HINWEIS: Um den Prozess unter Task-Manager zu finden

  1. Notieren Sie sich die PID (Prozess-ID) neben dem Port, den Sie betrachten.

  2. Öffnen Sie den Windows Task-Manager.

  3. Wählen Sie die Registerkarte Prozesse.

  4. Suchen Sie nach der PID, die Sie bei der Erstellung des Netzstat in Schritt 1 notiert haben.

    • Wenn Sie keine PID-Spalte sehen, klicken Sie auf Spalten anzeigen / auswählen. Wählen Sie PID.

    • Stellen Sie sicher, dass "Prozesse von allen Benutzern anzeigen" ausgewählt ist.

Cyborg
quelle
56

Holen Sie sich PID und Bildname

Verwenden Sie nur einen Befehl:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

wo 9000sollte durch Ihre Portnummer ersetzt werden.

Die Ausgabe enthält ungefähr Folgendes:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

Erläuterung:

  • Es durchläuft jede Zeile von der Ausgabe des folgenden Befehls:

    netstat -aon | findstr 9000
    
  • Aus jeder Zeile wird die PID ( %a- der Name ist hier nicht wichtig) extrahiert (PID ist das 5dritte Element in dieser Zeile) und an den folgenden Befehl übergeben

    tasklist /FI "PID eq 5312"
    

Wenn Sie den Header und die Rückgabe der Eingabeaufforderung überspringen möchten , können Sie Folgendes verwenden:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

Ausgabe:

java.exe                      5312 Services                   0    130,768 K
ROMANIA_engineer
quelle
2
Gute Antwort, aber Sie sollten sie ändern, findstr :9000wenn nicht, würden Sie sogar Apps finden, die die Nummer enthalten (z. B. wenn Sie nach "80" suchen, finden Sie auch Apps auf Port 80, 800, 8000).
Radon8472
48

Zuerst finden wir die Prozess-ID dieser bestimmten Aufgabe, die wir eliminieren müssen, um den Port frei zu bekommen:

Art

netstat -n -a -o

Nachdem Sie diesen Befehl in der Windows-Eingabeaufforderung (cmd) ausgeführt haben, wählen Sie die PID aus, die meiner Meinung nach die letzte Spalte ist. Angenommen, dies ist 3312.

Geben Sie nun ein

taskkill /F /PID 3312

Sie können dies jetzt überprüfen, indem Sie den netstatBefehl eingeben .

HINWEIS: Manchmal erlaubt Windows Ihnen nicht, diesen Befehl direkt auf CMD auszuführen. Führen Sie daher zunächst die folgenden Schritte aus:

Über das Startmenü -> Eingabeaufforderung (Rechtsklick auf Eingabeaufforderung und als Administrator ausführen)

Pankaj Pateriya
quelle
30

So erhalten Sie eine Liste aller Besitzprozess-IDs, die jeder Verbindung zugeordnet sind:

netstat -ao |find /i "listening"

Wenn Sie einen Prozess beenden möchten, haben Sie die ID und verwenden Sie diesen Befehl, damit der Port frei wird

Taskkill /F /IM PID of a process
Monis Majeed
quelle
1
Dies berücksichtigt nicht das Abhören von UDP-Ports
evandrix
27

Es ist sehr einfach, die Portnummer von einer PID in Windows abzurufen.

Das Folgende sind die Schritte:

  1. Gehen Sie zu Ausführen → Geben Sie cmd → Drücken Sie ein Enter.

  2. Schreiben Sie den folgenden Befehl ...

    netstat -aon | findstr [port number]
    

    (Hinweis: Fügen Sie keine eckigen Klammern ein.)

  3. Drücken Sie Enter...

  4. Dann gibt cmd Ihnen die Details des Dienstes, der an diesem Port ausgeführt wird, zusammen mit der PID.

  5. Öffnen Sie den Task-Manager, klicken Sie auf die Registerkarte "Dienst" und passen Sie die PID an die des cmd an.

Nishat Lakhani
quelle
18

Öffnen Sie einfach eine Befehlsshell und geben Sie ein (sagen Sie, Ihr Port ist 123456):

netstat -a -n -o | find "123456"

Sie werden alles sehen, was Sie brauchen.

Die Überschriften sind:

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

Dies ist wie hier erwähnt .

Tajveer Singh Nijjar
quelle
1
Zu Ihrer Information / für alle Interessierten: Entweder findstr 123456(ohne Anführungszeichen) oder find "123456"(mit Anführungszeichen). (@Josh)
Kevin Cruijssen
18

So finden Sie heraus, welcher spezifische Prozess (PID) welchen Port verwendet:

netstat -anon | findstr 1234

Wobei 1234 die PID Ihres Prozesses ist. [Gehen Sie zu Task-Manager → Registerkarte Dienste / Prozesse, um die PID Ihrer Anwendung zu ermitteln.]

Talha Imam
quelle
1
Es ist zu beachten, dass das -nFlag nicht zweimal gesetzt werden muss. -anoreicht.
Mwieczorek
16

Führen Sie PowerShell 5 unter Windows 10 oder Windows Server 2016 aus Get-NetTCPConnection Sie Cmdlet aus. Ich denke, dass es auch auf älteren Windows-Versionen funktionieren sollte.

Die Standardausgabe von Get-NetTCPConnectionenthält aus irgendeinem Grund keine Prozess-ID und ist etwas verwirrend. Sie können es jedoch jederzeit durch Formatieren der Ausgabe erhalten. Die Immobilie, die Sie suchen, ist OwningProcess.

  • Wenn Sie die ID des Prozesses ermitteln möchten, der Port 443 überwacht, führen Sie den folgenden Befehl aus:

    PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
    
    LocalAddress   : ::
    LocalPort      : 443
    RemoteAddress  : ::
    RemotePort     : 0
    State          : Listen
    AppliedSetting :
    OwningProcess  : 4572
    CreationTime   : 02.11.2016 21:55:43
    OffloadState   : InHost
    
  • Formatieren Sie die Ausgabe in eine Tabelle mit den Eigenschaften, nach denen Sie suchen:

    PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
    
    LocalAddress LocalPort  State OwningProcess
    ------------ ---------  ----- -------------
    ::                 443 Listen          4572
    0.0.0.0            443 Listen          4572
    
  • Wenn Sie einen Namen des Prozesses herausfinden möchten, führen Sie den folgenden Befehl aus:

    PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
    143      15     3448      11024              4572   0 VisualSVNServer
    
bahrep
quelle
13

Geben Sie den folgenden Befehl ein: netstat -aon | findstr :DESIRED_PORT_NUMBER

Zum Beispiel, wenn ich Port 80 finden möchte: netstat -aon | findstr :80

Diese Antwort wurde ursprünglich auf diese Frage gepostet .

Technotronic
quelle
11

Netstat:

  • -a zeigt alle Verbindungs- und Abhörports an
  • -b zeigt ausführbare Dateien an
  • -n Stop Hostnamen auflösen (numerische Form)
  • -o Besitzprozess

    netstat -bano | findstr "7002"
    
    netstat -ano > ano.txt 
    

Das Currports- Tool hilft beim Suchen und Filtern

Blaue Wolken
quelle
11
  1. Öffnen Sie die Eingabeaufforderung - Start → Ausführencmdoder Startmenü → Alle ProgrammeZubehörEingabeaufforderung .

  2. Art

    netstat -aon | findstr '[port_number]'
    

Ersetzen Sie die [port_number]durch die tatsächliche Portnummer, die Sie überprüfen und drücken möchten Enter.

  1. Wenn der Port von einer Anwendung verwendet wird, werden die Details dieser Anwendung angezeigt. Die Nummer, die in der letzten Spalte der Liste angezeigt wird, ist die PID (Prozess-ID) dieser Anwendung. Notieren Sie sich dies.
  2. Art

    tasklist | findstr '[PID]'
    

Ersetzen Sie die [PID]durch die Nummer aus dem obigen Schritt und drücken Sie Enter.

  1. Ihnen wird der Anwendungsname angezeigt, der Ihre Portnummer verwendet.
Anatole ABE
quelle
3
Unter Win 10: Ihr Befehl in Schritt 2 und Schritt 4 funktioniert nur, wenn Sie einfache Anführungszeichen durch doppelte Anführungszeichen ersetzen. Sollte netstat -aon | sagen findstr "[port_number]"
Leonardo Lopez
Diese Lösung erfordert keine erhöhte Berechtigung. Tks!
Totalys
10

netstat -aound netstat -abteilen Sie Ihnen die Anwendung mit. Wenn Sie jedoch kein Systemadministrator sind, wird "Der angeforderte Vorgang erfordert eine Erhöhung" angezeigt.

Es ist nicht ideal, aber wenn Sie den Prozess-Explorer von Sysinternals verwenden, können Sie in den Eigenschaften bestimmter Prozesse auf der Registerkarte TCP nachsehen, ob sie den Port verwenden, an dem Sie interessiert sind. Es ist ein bisschen wie eine Nadel und ein Heuhaufen Sache, aber vielleicht hilft es jemandem ...

Tony Delroy
quelle
Wenn Sie kein Administrator sind, können Sie den Prozess-Explorer (oder sogar den Windows-Task-Manager> Ressourcen-Manager) nicht verwenden, um diese Informationen von einem Prozess abzurufen, der zunächst nicht Ihnen gehört.
Abel
9

Ich empfehle CurrPorts von NirSoft.

CurrPorts kann die angezeigten Ergebnisse filtern. TCPView verfügt nicht über diese Funktion.

Hinweis: Sie können mit der rechten Maustaste auf die Socket-Verbindung eines Prozesses klicken und "Ausgewählte TCP-Verbindungen schließen" auswählen (dies ist auch in TCPView möglich). Dadurch werden häufig Verbindungsprobleme mit Outlook und Lync behoben, nachdem ich die VPNs gewechselt habe. Mit CurrPorts können Sie Verbindungen auch über die Befehlszeile mit dem Parameter "/ close" schließen.

Josh
quelle
7

Eine einzeilige Lösung, die mir hilft, ist diese. Ersetzen Sie einfach 3000 durch Ihren Port:

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id

Bearbeiten: Geändert killzu Stop-Processfür eine PowerShell-ähnliche Sprache

Engel Venchev
quelle
6
Sie möchten den Prozess wahrscheinlich nicht automatisch beenden. Ich würde diesen Kill-Befehl trennen und erklären. Ich möchte nicht, dass ein schlechter Benutzer das kopiert, ohne sorgfältig darüber nachzudenken.
TinkerTenorSoftwareGuy
1
Und wenn Sie sich für die vollständige PowerShell-Lösung entscheiden, ändern Sie Kill in Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
CubanX
6

Befolgen Sie diese Tools: Von cmd : C:\> netstat -anobmit Administratorrechten .

Process Explorer

Prozessspeicherauszug

Port Monitor

Alles von sysinternals.com.

Wenn Sie nur wissen möchten, wie der Prozess ausgeführt wird und welche Threads unter den einzelnen Prozessen ausgeführt werden, empfehle ich, mehr darüber zu erfahren wmic . Es ist ein wunderbares Kommandozeilen-Tool, das Ihnen viel mehr bietet, als Sie wissen können.

Beispiel:

c:\> wmic process list brief /every:5

Der obige Befehl zeigt alle 5 Sekunden eine kurze Liste aller Prozesse an. Um mehr zu erfahren, können Sie einfach den /?Befehl von Windows verwenden, zum Beispiel:

c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?

Und so weiter und so fort. :) :)

Perl Fanatic
quelle
PortMon (die Verbindung hinter Port Monitor) dient zur Überwachung von seriellen und parallelen Ports, nicht von Netzwerkports.
James vor
6

Verwenden:

netstat -a -o

Dies zeigt die PID des Prozesses, der an einem bestimmten Port ausgeführt wird.

Beachten Sie die Prozess-ID, gehen Sie zum Task-Manager und zur Registerkarte Dienste oder Details und beenden Sie den Prozess mit derselben PID.

Auf diese Weise können Sie einen Prozess beenden, der an einem bestimmten Port in Windows ausgeführt wird.

Nisha
quelle
6

Versuchen Sie für Benutzer von PowerShell Folgendes Get-NetworkStatistics:

> Get-NetworkStatistics | where Localport -eq 8000


ComputerName  : DESKTOP-JL59SC6
Protocol      : TCP
LocalAddress  : 0.0.0.0
LocalPort     : 8000
RemoteAddress : 0.0.0.0
RemotePort    : 0
State         : LISTENING
ProcessName   : node
PID           : 11552
Mikemaccana
quelle
5

Mit PowerShell ... ... wäre dies Ihr Freund (ersetzen Sie 8080 durch Ihre Portnummer):

 netstat -abno | Select-String -Context 0,1 -Pattern 8080

Beispielausgabe

>   TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING         2920
   [tnslsnr.exe]
>   TCP    [::]:8080              [::]:0                 LISTENING         2920
   [tnslsnr.exe]

In diesem Beispiel überwacht tnslsnr.exe (OracleXE-Datenbank) Port 8080.

Schnelle Erklärung

  • Select-Stringwird verwendet, um die lange Ausgabe von netstatfür die relevanten Zeilen zu filtern .
  • -Pattern testet jede Zeile gegen einen regulären Ausdruck.
  • -Context 0,1 gibt 0 führende Zeilen und 1 nachfolgende Zeile für jede Musterübereinstimmung aus.
Jpsy
quelle
2

Führen Sie unter Windows an der cmd-Eingabeaufforderung Folgendes aus, wenn Sie Dinge finden möchten, die lauschen oder mit Port 1234 verbunden sind:

netstat -na | find "1234"
Zoomzoom
quelle
1

Verwenden Sie das folgende Batch-Skript, das einen Prozessnamen als Argument verwendet und eine netstatAusgabe für den Prozess liefert .

@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End

:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------

netstat -ano |findstr %z%
goto :eof

:End
deshapriya debesh
quelle
1

Basierend auf Antworten mit Info und Kill ist es für mich nützlich, sie in einem Befehl zu kombinieren . Und Sie können dies von cmd aus ausführen, um Informationen über Prozesse zu erhalten, die einen bestimmten Port überwachen (Beispiel 8080):

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"

Oder wenn du es töten willst:

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i

Sie können diesen Befehl auch in eine Bat-Datei einfügen (sie unterscheiden sich geringfügig - ersetzen %idurch %%i):

Datei portInfo.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"

Datei portKill.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i

Dann können Sie von cmd Folgendes tun:

portInfo.bat 8080

oder

portKill.bat 8080

lczapski
quelle
1
Dies könnte ein nützliches Skript sein. Ich habe es jedoch sowohl in CMD als auch in PowerShell 6 ohne Glück versucht. Vielleicht könnten Sie Ihre Antwort verbessern, indem Sie ein bisschen mehr Details angeben.
Manfred
Funktioniert der erste Teil? Ist es nur ein Problem mit "Fledermaus"? Es gibt einige Unterschiede bei der Übergabe von Variablen: (%% i)
lczapski
@Manfred Ich habe dies auf 3 verschiedenen Windows 10 versucht. Zum Beispiel .\portInfo.bat 800in PowerShell gibt es so etwas wie:C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
lczapski
Entschuldigung, kein Glück. Ich habe diesen Befehl in eine Datei mit dem Namen portInfo.batin einem Powershell-Terminal eingefügt und dann ausgeführt .\portInfo.bat 8080. Die Ausgabe war nur der Inhalt der Batchdatei. Sehr gut, ich übersehen etwas. Hinweis: Ich verwende PowerShell 6.2.3 unter Windows 10. Ich habe es auch an einer regulären Eingabeaufforderung versucht, aber das Ergebnis war das gleiche: Ausgabe des Inhalts des Skripts. Ich bin sicher, ich vermisse eine wichtige Information, damit dies funktioniert.
Manfred
1
Warum nicht hinzufügen /nh: @tasklist /nh /fi "pid eq %i"? Und genau die Tür:Findstr ":8080"
Ich war es nicht
0

In meinem Fall wurde der Port (3000) überhaupt nicht verwendet und ist in netstat nicht sichtbar. Aber! Das Deinstallationsprogramm Docker für Windows hat das Problem behoben.

Tony Sepia
quelle