Comment puis-je tuer le processus utilisant actuellement un port sur localhost dans Windows?

495

Comment puis-je supprimer le processus / l'application en cours qui est déjà affecté à un port?

Par exemple: localhost:8080

KavinduWije
la source

Réponses:

1059

Étape 1:

Ouvrez cmd.exe (remarque: vous devrez peut- être l'exécuter en tant qu'administrateur, mais ce n'est pas toujours nécessaire), puis exécutez la commande ci-dessous:

netstat -ano | findstr :PORT_NUMBER

(Remplacez PORT_NUMBER par le numéro de port souhaité, mais conservez les deux points)

La zone entourée en rouge indique le PID (identificateur de processus). Localisez le PID du processus qui utilise le port souhaité.

Étape 2:

Ensuite, exécutez la commande suivante:

taskkill /PID PID /F

(Pas de deux points cette fois)

Enfin, vous pouvez vérifier si l'opération a réussi ou non en réexécutant la commande à "l'étape 1". S'il a réussi, vous ne devriez plus voir de résultats de recherche pour ce numéro de port.

KavinduWije
la source
Ca ne fonctionne pas. le processus est toujours affiché
Hardik Mandankaa
16
Fonctionne parfaitement. Dans mon cas, Tomcat fonctionnait sur le port 8080 et je devais relancer mon application Spring. i.imgur.com/aVwSYvR.png Merci beaucoup.
Hugo LM
16
J'ai dû entrer des caractères d'échappement lors de l'exécution de taskkill:taskkill //PID 12552 //F
Robert
1
la réponse acceptée ne fonctionnera pas pour les services qui sont configurés pour redémarrer en cas d'échec (ce n'est pas Linux)
nurettin
1
je pense que vous vouliez dire PID_NUMBER et non PORT_NUMBER danstaskkill /PID PORT_NUMBER /F
Marcin Kulik
132

Étape 1 (il en est de même dans la réponse acceptée écrite par KavinduWije ):

netstat -ano | findstr :yourPortNumber

Changez à l'étape 2 pour:

tskill typeyourPIDhere 

Remarque : taskkillne fonctionne pas dans certains terminaux git bash

afsarkhan10182
la source
1
Je ne l'ai pas trouvé pour moi
Tzvi Gregory Kaidanov
1
@TzviGregoryKaidanov à quel problème vous êtes confronté?
afsarkhan10182
1
merci, cela a fonctionné en changeant taskkill en tskill
Md Shoaib Alam
1
C'est la solution qui a fonctionné pour moi. J'utilise GIT Bash.
dxhans5
1
Cela peut-il être fait en passant la sortie de la première commande au seond?
James
115

Avec les outils par défaut de Windows 10:

  • La première étape:

Ouvrez Windows PowerShell en tant qu'administrateur

  • Deuxième étape:

Trouvez le PID (ProcessID) pour le port 8080:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0 LISTEN 77777

  • Troisième étape:

Tuez le processus zombie:

taskkill /f /pid 77777

où "77777" est votre PID

Duracell De Monaco
la source
1
Comment automatiser le processus et combiner ces deux commandes ensemble dans un fichier bat s'il n'y a pas de possibilité de visualiser la sortie cmd puis d'écrire manuellement une nouvelle commande?
Serob_b
3
@Serob_b set /p port="Enter port: "-> Port d'entrée FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine-> Extrait le PID en variable taskkill /f /pid %ProcessId%-> Tue la tâche cmd /k -> Gardez la fenêtre ouverte
Vikrant
94

Si vous utilisez GitBash

La première étape:

netstat -ano | findstr :8080

Deuxième étape:

taskkill /PID typeyourPIDhere /F 

( /Ftermine avec force le processus)

Ara Yaghsizian
la source
double
slashed n'a
2
@ kylexy1357 essayez avec une seule barre oblique. La "double barre oblique" est un caractère d'échappement qui précède le /, ce qui n'est pas nécessaire pour certains obus
Robert
27

Dans Windows PowerShell version 1 ou ultérieure pour arrêter un processus sur le port 3000, tapez:

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


Comme suggéré par @morganpdx, voici une version plus PowerShell, meilleure:

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

todorm
la source
'Stop-Process' is not recognized as an internal or external command,
Vert
3
Je trouve que cela fonctionne:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
morganpdx
1
@Green Vous devez exécuter la commande dans Windows PowerShell
todorm
1
première erreur, le seconf a travaillé pour moi
Tom
24

Pour une utilisation en ligne de commande:

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

Pour une utilisation dans le fichier bat:

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
Mahesh Narwade
la source
1
Si vous voulez le faire dans un .bat, remplacez% a pour %% a
Mahesh Narwade
23

Si vous connaissez déjà le numéro de port, il suffira probablement d'envoyer un signal de terminaison logicielle au processus (SIGTERM):

kill $(lsof -t -i :PORT_NUMBER)
Fellow Stranger
la source
Si vous savez que le port utilise IPv4, vous pouvez également le faire lsof -nt -i4TCP:9001.
Josh Habdas
10

Pour les utilisateurs de Windows, vous pouvez utiliser l' outil CurrPorts pour tuer facilement les ports en cours d'utilisation:

Entrez la description de l'image ici

Zuhair Taha
la source
10

J'exécutais zookeeper sur Windows et je n'ai pas pu empêcher ZooKeeper de fonctionner sur le port 2181 à l'aide de zookeeper-stop.sh, j'ai donc essayé cette méthode à double barre oblique "//" pour taskkill. Ça a marché

     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.
driven_spider
la source
6

Si vous utilisez Windows Terminal, le processus de mise à mort pourrait être un peu moins fastidieux. J'ai utilisé le terminal Windows et kill PIDfonctionne bien pour moi pour tuer les processus sur le port car le nouveau terminal Windows prend en charge certaines commandes bash. Par exemple:kill 13300

Ainsi, le processus complet ressemblera à ceci-

  • Ouvrez le terminal Windows
  • Tapez la commande suivante pour afficher les processus en cours d'exécution sur le port que vous cherchez à tuer les processus. netstat -ano | findstr :PORT
  • Tapez following pour tuer le processus. kill PID

Par exemple:

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>

Voyez quand j'ai tapé la première commande pour lister les processus sur le port retourné vide. Cela signifie que tous les processus sont tués maintenant.

paresseux
la source
Je sais que cela fonctionne parce que je l'ai testé, j'essaie de trouver de la documentation à ce sujet, en avez-vous?
DanStarns
@ DanStarns, je n'ai trouvé que cela jusqu'à présent! docs.microsoft.com/en-us/windows/terminal
lazycipher
Merci pour votre temps, ce n'est pas tout à fait la page que je recherche, une page avec toutes les fonctions fournies dans le terminal comme kill. Je posterai ici si je trouve.
DanStarns
1
Je n'ai pas trouvé grand-chose à ce sujet pour l'instant. Veuillez poster si vous trouvez quelque chose.
lazycipher
4

Vous pouvez le faire en exécutant un fichier bat:

@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
la source
4

Si vous souhaitez le faire en utilisant Python: cochez Est-il possible en python de tuer le processus qui écoute sur un port spécifique, par exemple 8080?

La réponse de Smunk fonctionne bien. Je répète son code ici:

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
la source
Cela a fonctionné pour un socket qui utilise également un numéro de port particulier dans Google Cloud! Merci une tonne
peevesy
0

Solution à une ligne utilisant GitBash :

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

Remplacez 8080 par le port que votre serveur écoute.

Si vous devez l'utiliser souvent, essayez d'ajouter à votre ~/.bashrcfonction:

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

et exécutez simplement

killport 8080
Italo Borssatto
la source
-1

Nous pouvons éviter cela en redémarrant simplement IIS, en utilisant la commande ci-dessous:

IISRESET
ksrider 148
la source