132 votes

Trouver le PID d'un processus qui utilise un port sous Windows

Mon service se plante au démarrage avec le classique :

java.rmi.server.ExportException: Listen failed on port: 9999

Comment puis-je trouver le processus pour le tuer ?

252voto

Thomas Points 662

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

103voto

Andrew Points 359

Trouver le PID d'un processus qui utilise un port sous Windows (par exemple, port : "9999")

netstat -aon | find "9999"

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

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

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

Sortie :

TCP    0.0.0.0:9999       0.0.0.0:0       LISTENING       15776

Puis tuer le processus par PID

taskkill /F /PID 15776

/F - Spécifie l'arrêt forcé du ou des processus.

Note : Vous pouvez avoir besoin d'une permission supplémentaire (exécuter depuis l'administrateur) pour tuer certains processus.

18voto

Pavankumar Barot Points 311

Commandement :

netstat -aon | findstr 4723

Sortie :

TCP    0.0.0.0:4723           0.0.0.0:0                LISTENING       10396

Maintenant, coupez l'ID du processus, "10396", en utilisant la fonction for dans Windows.

Commandement :

for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa

Sortie :

10396

Si vous voulez couper le 4ème chiffre de la valeur signifie "ÉCOUTE" alors commandez dans Windows.

Commandement :

for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa

Sortie :

ÉCOUTE

9voto

eFox Points 373

Si vous voulez faire cela de manière programmatique, vous pouvez utiliser certaines des options qui vous sont données comme suit dans un script PowerShell :

$processPID =  $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID

Cependant, soyez conscient que plus vous serez précis, plus le résultat de votre PID sera précis. Si vous savez sur quel hôte le port est censé se trouver, vous pouvez réduire considérablement le champ d'investigation. netstat -aon | findstr "0.0.0.0:9999" ne renverra qu'une seule demande et très probablement la bonne. En cherchant uniquement sur le numéro de port, vous risquez de renvoyer des processus qui ont seulement 9999 en elle, comme ceci :

TCP    0.0.0.0:9999                        0.0.0.0:0       LISTENING       15776
UDP    [fe80::81ad:9999:d955:c4ca%2]:1900  *:*                             12331

Le candidat le plus probable finit généralement en premier, mais si le processus s'est terminé avant que vous n'exécutiez votre script, vous pouvez vous retrouver avec le PID 12331 à la place et tuer le mauvais processus.

5voto

Quispie Points 318

Après quelques manipulations avec un script, je suis arrivé à cette action. Copiez-la et enregistrez-la dans un fichier .bat :

FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i

Changez 'find "3306"' en numéro de port qui doit être libre. Ensuite, exécutez le fichier en tant qu'administrateur. Il tuera tous les processus fonctionnant sur ce port.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X