Comment savoir quel processus écoute sur un port sous Windows?

Comment savoir quel processus écoute sur un port sous Windows?

Comment savoir quel processus écoute sur un port sous Windows?

Montrez la meilleure réponse

Currports est un outil qui facilite également la recherche et le filtrage nirsoft.net/utils/cports.html

Avatar TMN

Je suis tombé dessus en essayant d'exécuter Tomcat en mode débogage sous IntelliJ, la meilleure solution pour moi s'est avérée être de changer la configuration de transport de débogage (Fichier-> Paramètres-> Build / exe / deploy-> Debugger) de "socket" en "la memoire partagée".

PowerShell

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

cmd

 C:\> netstat -a -b
 

(Ajoutez -n pour l'empêcher d'essayer de résoudre les noms d'hôte, ce qui le rendra beaucoup plus rapide.)

Notez la recommandation de Dane pour TCPView . Cela semble très utile!

-a Affiche toutes les connexions et les ports d'écoute.

-b Affiche l'exécutable impliqué dans la création de chaque connexion ou port d'écoute. Dans certains cas, les exécutables bien connus hébergent plusieurs composants indépendants, et dans ces cas, la séquence des composants impliqués dans la création de la connexion ou du port d'écoute s'affiche. Dans ce cas, le nom de l'exécutable est en [] en bas, en haut se trouve le composant qu'il a appelé, et ainsi de suite jusqu'à ce que TCP / IP soit atteint. Notez que cette option peut prendre du temps et échouera à moins que vous ne disposiez des autorisations suffisantes.

-n Affiche les adresses et les numéros de port sous forme numérique.

-o Affiche l'ID de processus propriétaire associé à chaque connexion.

-o pour obtenir le PID

et taskkill / PID pour ensuite terminer le processus, en utilisant / F si approprié.

Vous devrez peut-être exécuter votre shell de ligne de commande en tant qu'administrateur, sinon vous pouvez obtenir un message d'erreur sur les privilèges insuffisants. Utilisez l'option "Exécuter en tant qu'administrateur" lorsque vous cliquez avec le bouton droit sur cmd.exe.

Fonctionne mais nécessite une autorisation élevée. Maj + clic droit sur l'icône de commande -> exécuter en tant qu'administrateur

Lorsque vous utilisez -o pour afficher le PID, vous pouvez ensuite le diriger vers grep pour le numéro de port (si cygwin ou msys est installé) car le pid est affiché sur la même ligne par opposition au nom du processus qui est affiché sur une ligne distincte.

Parfois, je ne peux pas exécuter mon serveur httpd Apache parce que PID 4 prend le port 80 pour une raison quelconque. Le problème est que le processus avec PID 4 est bien Le "système". Le redémarrage est utile, mais si quelqu'un connaît la raison ou un moyen de savoir pourquoi le système prend le port 80, je suis à l'écoute.

@BradWilson "-b" est une option non valide, veuillez utiliser netstat -a -d

@BradWilson et @Sathish Il semble que les options de netstat ne soient pas cette norme. J'ai dû utiliser netstat -a -n -p . Les options -b et -d ne sont pas disponibles. L'option -o était pour les temporisateurs. Les options -p affichent le nom du programme et le PID. (sur debian 8).

netstat 1.42 (2001-04-15) n'a pas d'indicateur -b

Après avoir obtenu le PID - disons que c'est 1234 - alors vous pouvez utiliser tasklist /fi "pid eq 1234" pour trouver le nom et d'autres détails du processus.

Sur mon système, la sortie de cette commande, en plus d'être horriblement difficile à lire en raison de l'habillage, a débordé le tampon de l'invite de commande. Je préfère normalement les outils de ligne de commande (bien que je sois certes beaucoup plus à l'aise dans une ligne de commande Linux que Windows), mais dans ce cas, j'ai trouvé l'interface graphique du moniteur de ressources suggérée par @bcorso beaucoup plus utile.

@sebastian_t Pour le processus système (PID 4), il y a netsh http show urlacl . Il affiche les réservations d'URL du système.

utiliser | grep :80 est utile pour rechercher un port spécifique. si installé grep .

netstat -a -b a débordé tout l'écran cmd. Je n'ai pas pu trouver le pid que je cherchais avant de partir. Ce dont j'avais besoin était un moyen de trouver le port d'un processus spécifique en utilisant pid.

Le code PowerShell ne fonctionne pas réellement, j'obtiens cette erreur: Get-NetTCPConnection: Impossible de traiter la transformation d'argument sur le paramètre 'LocalPort'. Impossible de convertir la valeur "numéro_port" en type "System.UInt16 []". Erreur: "Impossible de convertir la valeur" portNumber "pour taper" System.UInt16 ". Erreur:" La chaîne d'entrée n'était pas dans un format correct. ""

Cela ne fonctionne pas dans PS3.0 - pourquoi les gens de Windows ne répertorient plus les versions? À quelle version de PowerShell ces commandes sont-elles destinées?

@RodionSychev La commande powershell s'attend à ce que vous remplaciez "portNumber" par le numéro de port que vous recherchez. L'erreur indique que "portNumber" n'est pas un nombre.

Avatar aku

Pour Windows:

netstat -aon | find /i "listening"
 

+1 Mais gardez à l'esprit que si vos fenêtres fonctionnent dans une langue autre que l'anglais, vous devrez changer "écouter" le terme natif. Par exemple. netstat -aon | find /i "abhören" pour l'allemand.

Dans mon cas, cela n'a pas fonctionné à cause du signe des guillemets, mais la solution netstat -aon | findstr LISTENING fonctionne parfaitement!

Cela fonctionne sans exiger des privilèges élevés, donc voté.

Je reçois une erreur en essayant d'exécuter cette commande sur W10 15063.729 avec PowerShell: FIND: Parameter format not correct

En quoi cette réponse est-elle pertinente pour "savoir quel processus [nom] écoute sur un port sous Windows?"

Avatar joe

Utilisez // i au lieu de / i si vous utilisez git bash sur Windows

Utilisez TCPView si vous souhaitez une interface graphique pour cela. Il s'agit de l'ancienne Sysinternals que Microsoft a achetée.

C'est selon moi la meilleure option, d'autant plus que tous les processus sont dans la même liste et que vous pouvez fermer les processus directement en cliquant dessus avec le bouton droit.

De plus, cela ne nécessite pas de privilèges d'administrateur!

Si vous souhaitez utiliser un outil graphique pour ce faire, il y a Sysinternals «TCPView .

  1. Ouvrez une fenêtre d'invite de commande (en tant qu'administrateur) Dans "Démarrer \ Boîte de recherche" Entrez "cmd" puis cliquez avec le bouton droit sur "cmd.exe" et sélectionnez "Exécuter en tant qu'administrateur"

  2. Saisissez le texte suivant, puis appuyez sur Entrée.

    netstat -abno

    -a Affiche toutes les connexions et les ports d'écoute.

    -b Affiche l'exécutable impliqué dans la création de chaque connexion ou             port d'écoute. Dans certains cas, un exécutable bien connu héberge             plusieurs composants indépendants, et dans ces cas, la             séquence de composants impliqués dans la création de la connexion             ou le port d'écoute s'affiche. Dans ce cas, l'exécutable             le nom est en [] en bas, en haut se trouve le composant qu'il a appelé,             et ainsi de suite jusqu'à ce que TCP / IP soit atteint. Notez que cette option             peut prendre du temps et échouera à moins que vous ayez suffisamment             autorisations.

    -n Affiche les adresses et les numéros de port sous forme numérique.

    -o Affiche l'ID de processus propriétaire associé à chaque connexion.

  3. Trouvez le port que vous écoutez sous "Adresse locale"

  4. Regardez le nom du processus directement sous celui-ci.

REMARQUE: pour trouver le processus sous le Gestionnaire des tâches

  1. Notez le PID (identificateur de processus) à côté du port que vous regardez.

  2. Ouvrez le Gestionnaire des tâches de Windows.

  3. Sélectionnez l'onglet Processus.

  4. Recherchez le PID que vous avez noté lorsque vous avez fait le netstat à l'étape 1.

    • Si vous ne voyez pas de colonne PID, cliquez sur Afficher / sélectionner les colonnes. Sélectionnez PID.

    • Assurez-vous que "Afficher les processus de tous les utilisateurs" est sélectionné.

Suivez ces outils: De cmd : C:\> netstat -anob avec les privilèges Administrateur .

Process Explorer

Dump de processus

Moniteur de port

Tout de sysinternals.com.

Si vous voulez simplement connaître le processus en cours et les threads sous chaque processus, je vous recommande d'en savoir plus sur wmic . C'est un merveilleux outil en ligne de commande, qui vous offre bien plus que ce que vous pouvez savoir.

Exemple:

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

La commande ci-dessus affichera une liste de tous les processus en bref toutes les 5 secondes. Pour en savoir plus, vous pouvez simplement utiliser la commande /? de Windows, par exemple,

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

Et ainsi de suite et ainsi de suite. :)

Utilisez:

netstat -a -o
 

Cela montre le PID du processus exécuté sur un port particulier.

Gardez à l'esprit l'ID du processus et accédez au Gestionnaire des tâches et aux services ou à l'onglet Détails et terminez le processus qui a le même PID.

Ainsi, vous pouvez tuer un processus en cours d'exécution sur un port particulier sous Windows.

Vous pouvez obtenir plus d'informations si vous exécutez la commande suivante:

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

en utilisant la commande 'Rechercher' vous permet de filtrer les résultats. find /i "listening" n'affichera que les ports en "écoute". Remarque, vous avez besoin du /i pour ignorer la casse, sinon vous taperiez find "LISTENING". | find "port" limitera les résultats uniquement à ceux contenant le numéro de port spécifique. Notez que cela filtrera également les résultats qui ont le numéro de port n'importe où dans la chaîne de réponse.

FWIW tentant d'exécuter cela dans PowerShell v2.0 génère l'erreur FIND: Parameter format not correct . Vous devez ajouter un espace après les critères de recherche. Cela vous laissera avec netstat -aon | find /i "listening" | find "1234 " .

Remplacez "port" ci-dessus par votre port, ex "5000"

@soi. J'obtiens toujours cette erreur avec PS 5.1, même après avoir ajouté l'espace après le tuyau. Savez-vous ce qui se passe?

@NickeManarinin & @self soit d'abord passer de powershell à cmd (tapez simplement cmd et appuyez sur Entrée puis refaites la commande) ou dans powershell utilisez plutôt cette commande: netstat -aon | find / i "{back tick} " écoute {back tick} "" | find "{back tick} " port {back tick} "" (<- notez les guillemets échappés - excusez le terme back tick car je ne peux pas ajoutez le personnage réel car il pense que c'est un snipping)

netstat -ao et netstat -ab vous indiquent l'application, mais si vous n'êtes pas administrateur système, vous obtenez "L'opération demandée nécessite une élévation".

Ce n'est pas idéal, mais si vous utilisez Process Explorer de Sysinternals, vous pouvez accéder à des propriétés des processus et regardez l'onglet TCP pour voir s'ils utilisent le port qui vous intéresse. C'est un peu un truc d'aiguille et de meule de foin, mais peut-être que cela aidera quelqu'un ...

Si vous n'êtes pas administrateur, vous ne pourrez pas utiliser l'Explorateur de processus (ou même le Gestionnaire des tâches Windows> Gestionnaire de ressources) pour obtenir ces informations à partir d'un processus qui n'est pas le vôtre pour commencer.

Pour obtenir une liste de tous les ID de processus propriétaires associés à chaque connexion:

netstat -ao |find /i "listening"
 

Si vous voulez tuer un processus, ayez l'ID et utilisez cette commande pour que le port devienne libre

Taskkill /F /IM PID of a process
 

cela ne tient pas compte de l'écoute des ports UDP

Il existe une interface graphique native pour Windows:

  • Menu Démarrer → Tous les programmes Accessoires Outils système Moniteur de ressources

Ou Exécuter resmon.exe , ou à partir de l'onglet de performance Gestionnaire des tâches .

Entrez la description de l'image ici

Affiche également l'état du pare-feu de la liaison (dernière colonne). Très utile.

Vous devez être administrateur (ou dans ce groupe) pour exécuter cela.

@bcorso, que signifie la liaison à " adresse non spécifiée "?

Peut également être lancé à partir de l'onglet Performances du Gestionnaire des tâches, au moins dans Windows 10. (N'avez pas vérifié les autres versions.)

Avatar RBT

Vous pouvez également démarrer le moniteur de ressources à partir de l'onglet de performances du Gestionnaire des tâches en cliquant sur le bouton Open Resource Monitor . La commande perfmon /res de l'invite d'exécution fonctionne également pour ouvrir le moniteur de ressources.

Le commentaire de @ user4836454 ci-dessus n'est pas correct: le moniteur de ressources affiche les ports avec les écouteurs, même s'il n'y a pas de connexion réseau à ces ports. Regardez simplement la section "Ports d'écoute" au lieu de la section "Connexions TCP".

Cela semble omettre certains des ports TCP qui sont parfois utilisés, même s'ils sont utilisés dans la mesure où d'autres applications qui en ont besoin ne peuvent pas démarrer.

Pour une raison quelconque, le pid que je cherchais n'était pas répertorié dans le moniteur de ressources. J'ai finalement dû exécuter la commande netstat.

@Pacerier Une seule interface Ethernet peut avoir plusieurs adresses IP qui lui sont attribuées (généralement dans les serveurs). «Non spécifié» signifie qu'il écoute sur le port à n'importe quelle adresse utilisée par le serveur. L'opposé serait d'afficher la ou les adresses IP auxquelles le programme répondra.

D'abord, nous trouvons l'ID de processus de cette tâche particulière que nous devons éliminer afin de libérer le port:

Type

netstat -n -a -o
 

Après avoir exécuté cette commande dans l'invite de ligne de commande Windows (cmd), sélectionnez le pid dont je pense que la dernière colonne. Supposons que ce soit 3312.

Tapez maintenant

taskkill /F /PID 3312
 

Vous pouvez maintenant recouper en tapant la commande netstat .

REMARQUE: parfois Windows ne vous permet pas d'exécuter cette commande directement sur CMD, vous devez donc d'abord suivre ces étapes:

Dans le menu Démarrer -> invite de commande (faites un clic droit sur l'invite de commande et exécutez en tant qu'administrateur)

Je recommande les CurrPorts de NirSoft.

CurrPorts peut filtrer les résultats affichés. TCPView ne dispose pas de cette fonctionnalité.

Remarque: vous pouvez cliquer avec le bouton droit sur la connexion socket d'un processus et sélectionner "Fermer les connexions TCP sélectionnées" (vous pouvez également le faire dans TCPView). Cela résout souvent les problèmes de connectivité que j'ai avec Outlook et Lync après avoir changé de VPN. Avec CurrPorts, vous pouvez également fermer les connexions à partir de la ligne de commande avec le paramètre "/ close".

Obtenir le PID et le nom de l'image

N'utilisez qu'une seule commande:

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

9000 doit être remplacé par votre numéro de port.

La sortie contiendra quelque chose comme ceci:

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

Explication :

  • il parcourt chaque ligne de la sortie de la commande suivante:

    netstat -aon | findstr 9000
    
  • de chaque ligne, le PID (%a - le nom n'est pas important ici) est extrait (le PID est l'élément 5 e dans cette ligne) et passé à la commande suivante

    tasklist /FI "PID eq 5312"
    

Si vous souhaitez ignorer l'en-tête et le retour de l'invite de commande , vous pouvez utiliser:

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

Sortie :

java.exe                      5312 Services                   0    130,768 K
 

Bonne réponse, mais vous devriez le changer en findstr :9000 sinon, vous trouverez même des applications contenant le numéro (par exemple, lorsque vous recherchez "80", vous trouverez également des applications sur le port 80, 800, 8000).

Il est très simple d'obtenir le numéro de port à partir d'un PID sous Windows.

Voici les étapes:

  1. Allez à exécuter → tapez cmd → appuyez sur Entre.

  2. Écrivez la commande suivante ...

    netstat -aon | findstr [port number]
     

    (Remarque: n'incluez pas de crochets.)

  3. Appuyez sur Enter...

  4. Ensuite, cmd vous donnera le détail du service exécuté sur ce port avec le PID.

  5. Ouvrez le Gestionnaire des tâches et appuyez sur l'onglet service et faites correspondre le PID avec celui de la cmd, et c'est tout.

Pour ceux qui utilisent PowerShell, essayez 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
 

Avec PowerShell 5 sur Windows 10 ou Windows Server 2016, exécutez Get-NetTCPConnection applet de commande. Je suppose que cela devrait également fonctionner sur les anciennes versions de Windows.

La sortie par défaut de n'inclut pas l'ID de processus pour une raison quelconque et c'est un peu déroutant. Cependant, vous pouvez toujours l'obtenir en formatant la sortie. La propriété que vous recherchez est Get-NetTCPConnection .

  • Si vous souhaitez trouver l'ID du processus qui écoute sur le port 443, exécutez cette commande:

    OwningProcess
  • Formatez la sortie dans un tableau avec les propriétés que vous recherchez:

    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
    
  • Si vous souhaitez connaître le nom du processus, exécutez cette commande:

    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
    
    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

Tapez la commande: netstat -aon | findstr :DESIRED_PORT_NUMBER

Par exemple, si je veux trouver le port 80: netstat -aon | findstr :80

Cette réponse a été initialement publiée sur cette question .

Pour Windows, si vous souhaitez trouver des éléments à l'écoute ou connectés au port 1234, exécutez la commande suivante à l'invite cmd:

netstat -na | find "1234"
 

Ouvrez simplement un shell de commande et tapez (en disant que votre port est 123456):

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

Vous verrez tout ce dont vous avez besoin.

Les en-têtes sont:

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

C'est comme mentionné ici .

Pour info / pour toute personne intéressée: c'est soit findstr 123456 (sans guillemets) ou find "123456" (avec guillemets). (@Josh)

Utilisation de PowerShell ... ... ce serait votre ami (remplacez 8080 par votre numéro de port):

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

Exemple de sortie

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

Dans cet exemple, tnslsnr.exe (base de données OracleXE) écoute sur le port 8080.

Explication rapide

  • Select-String est utilisé pour filtrer la longue sortie de netstat pour les lignes pertinentes.
  • -Pattern teste chaque ligne par rapport à une expression régulière.
  • -Context 0,1 affichera 0 première ligne et 1 dernière ligne pour chaque correspondance de modèle.

Le commutateur -b mentionné dans la plupart des réponses nécessite que vous disposiez de privilèges administratifs sur la machine. Vous n'avez pas vraiment besoin de droits élevés pour obtenir le nom du processus!

Recherchez le pid du processus en cours d'exécution dans le numéro de port (par exemple, 8080)

netstat -ano | findStr "8080"
 

Trouvez le nom du processus par pid

tasklist /fi "pid eq 2216"
 

 processus de recherche par port TCP / IP

Utilisez le script batch ci-dessous qui prend un nom de processus comme argument et donne une sortie netstat pour le processus.

@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
 

Netstat:

  • -a affiche tous les ports de connexion et d'écoute
  • -b affiche les exécutables
  • -n stop résoudre les noms d'hôte (forme numérique)
  • -o processus propriétaire

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

L'outil Currports permet de rechercher et de filtrer

Par programme, vous avez besoin de choses de iphlpapi.h , par exemple GetTcpTable2 (). Les structures telles que MIB_TCP6ROW2 contiennent le PID du propriétaire .

Pour savoir quel processus spécifique (PID) utilise quel port:

netstat -anon | findstr 1234
 

Où 1234 est le PID de votre processus. [Accédez au Gestionnaire des tâches → onglet Services / Processus pour connaître le PID de votre application.]

Il convient de noter que vous n'avez pas besoin du drapeau -n défini deux fois. -ano suffit.

Une solution monoligne qui m'aide est celle-ci. Remplacez simplement 3000 par votre port:

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

Modifier: kill modifié en Stop-Process pour un langage plus proche de PowerShell

Vous ne voulez probablement pas tuer le processus automatiquement. Je séparerais cette commande kill et l'expliquerais. Je ne veux pas de mauvais copier-coller par les utilisateurs sans réfléchir soigneusement.

Et si vous optez pour la solution complète PowerShell, remplacez kill par Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process

  1. Ouvrez l'invite de commande - démarrer → Exécuter cmd , ou démarrer le menu → Tous les programmes Accessoires Invite de commandes .

  2. Type

    netstat -aon | findstr '[port_number]'
    

Remplacez le [port_number] par le numéro de port réel que vous souhaitez vérifier et appuyez sur Entrée .

  1. Si le port est utilisé par une application, les détails de cette application seront affichés. Le numéro, qui apparaît dans la dernière colonne de la liste, est le PID (ID de processus) de cette application. Prenez note de cela.
  2. Type

    tasklist | findstr '[PID]'
    

Remplacez le [PID] par le numéro de l'étape ci-dessus et appuyez sur Entrée .

  1. Le nom de l'application qui utilise votre numéro de port vous sera indiqué.

Sur Win 10: votre commande à l'étape 2 et à l'étape 4 ne fonctionne que si vous remplacez les guillemets simples par des guillemets doubles. Devrait dire netstat -aon | findstr "[numéro_port]"

Basé sur les réponses avec info et kill , pour moi, il est utile de les combiner dans one command . Et vous pouvez l'exécuter à partir de cmd pour obtenir des informations sur les processus qui écoutent sur un port donné (exemple 8080):

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

Ou si vous voulez le tuer:

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

Vous pouvez également mettre ces commandes dans un fichier bat (elles seront légèrement différentes - remplacer %i pour %%i ):

Fichier portInfo.bat

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

Fichier portKill.bat

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

Alors vous de cmd vous pouvez le faire:

portInfo.bat 8080

ou

portKill.bat 8080

Cela pourrait être un script utile. Cependant, je l'ai essayé dans CMD ainsi que PowerShell 6 sans succès. Vous pourriez peut-être améliorer votre réponse en fournissant un peu plus de détails.

La première partie fonctionne-t-elle? Est-ce seulement un problème avec "bat"? Il existe quelques différences dans le passage des variables: (%% i)

@Manfred J'ai essayé ceci sur 3 fenêtres différentes 10. Par exemple, .\portInfo.bat 800 dans PowerShell, cela donne quelque chose comme ceci: 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

Désolé, pas de chance. J'ai mis cette commande dans un fichier nommé portInfo.bat dans un terminal PowerShell, puis j'ai exécuté .\portInfo.bat 8080 . La sortie n'était que le contenu du fichier de commandes. Très bien, je néglige quelque chose. Remarque, j'utilise PowerShell 6.2.3 sous Windows 10. Je l'ai également essayé dans une invite de commande standard, mais le résultat était le même: sortie du contenu du script. Je suis sûr qu'il me manque une information cruciale pour que cela fonctionne.

@Manfred Le contenu du fichier doit être imprimé, comme je l'ai montré lors du commit précédent. Peut-être qu'il n'y avait rien sur le port 8080. Avez-vous essayé la première commande? Et a-t-il renvoyé quelque chose pour ce port? for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do tasklist /fi "pid eq %i"