web-dev-qa-db-fra.com

Tuez un processus en recherchant le port utilisé par un .BAT

Dans Windows, que peut rechercher le port 8080 et tenter de supprimer le processus utilisé via un fichier .BAT?

117
Mike Flynn

Voici une commande pour vous aider à démarrer:

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P

Lorsque vous avez confiance dans votre fichier de commandes, supprimez @ECHO.

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P

Notez que vous devrez peut-être modifier cela légèrement pour différents systèmes d'exploitation. Par exemple, sous Windows 7, vous aurez peut-être besoin de tokens=5 au lieu de tokens=4.

Comment ça marche

FOR /F ... %variable IN ('command') DO otherCommand %variable...

Cela vous permet d'exécuter command et de passer en boucle sur sa sortie. Chaque ligne sera insérée dans %variable et pourra être étendue dans otherCommand autant de fois que vous le souhaitez et où vous le souhaitez. %variable en cours d'utilisation ne peut avoir qu'un nom composé d'une seule lettre, par exemple. %V.

"tokens=4 delims= "

Cela vous permet de scinder chaque ligne par des espaces, de prendre le 4ème bloc de cette ligne et de le ranger dans %variable (dans notre cas, %%P). delims semble vide, mais cet espace supplémentaire est en réalité significatif.

netstat -a -n -o

Exécute-le et découvre. Selon l'aide de la ligne de commande, il affiche "toutes les connexions et les ports d'écoute.", "Affiche les adresses et les numéros de port sous forme numérique", et "affiche l'ID de processus propriétaire associé à chaque connexion.". Je viens d'utiliser ces options depuis que quelqu'un d'autre l'a suggéré, et ça a marché :)

^|

Cela prend la sortie de la première commande ou du premier programme (netstat) et la transmet à un deuxième programme de commande (findstr). Si vous utilisiez cela directement sur la ligne de commande, plutôt que dans une chaîne de commande, vous utiliseriez | au lieu de ^|.

findstr :8080

Ceci filtre toutes les sorties qui y sont passées, en ne renvoyant que les lignes contenant :8080.

TaskKill.exe /PID <value>

Cela tue une tâche en cours à l'aide de l'ID de processus.

%%P instead of %P

Ceci est requis dans les fichiers de commandes. Si vous avez fait cela à l’invite de commande, vous utiliseriez plutôt %P.

131

Ouvrez la commande Invite et exécutez les commandes suivantes

 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

, ici 3116 est l'ID de processus

190
Mohit Singh

Pour trouver un processus spécifique en ligne de commande, utilisez la commande ci-dessous ici 8080 est le port utilisé par le processus

netstat -ano | findstr 8080

pour tuer le processus utiliser en-dessous de la commande ici 21424 est l'identifiant du processus

taskkill /pid 21424 /F 
51

En utilisant la solution de Merlyn, d’autres applications ont été détruites comme firefox . Ces processus utilisaient le même port, mais pas en tant qu’écouteur:

par exemple:

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

Par conséquent, vous pouvez les exclure en ajoutant "LISTENING" à findstr comme suit:

FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
19
Solubris

Pour répertorier tous les processus en cours d'exécution sur le port 8080, procédez comme suit.

netstat -ano | trouver "8080"

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       10612

TCP    [::]:8080              [::]:0                 LISTENING       10612

Ensuite, pour tuer le processus, exécutez la commande suivante

taskkill/F/PID 10612

16
Sardesh Sharma

Merci à vous tous d’ajouter que certains processus ne se fermeront que si le commutateur/F force est également envoyé avec TaskKill . De même, avec le commutateur/T, tous les processus secondaires du processus seront fermés.

C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^|
 findstr :2002') DO TaskKill.exe /PID %P /T /F

Pour les services, il faudra obtenir le nom du service et exécuter:

sc stop ServiceName

13
xtrm
3
CharlesB

Juste pour compléter:

Je voulais tuer tous les processus connectés à un port spécifique mais pas le processus d'écoute

la commande (dans cmd Shell) pour le port 9001 est la suivante:

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P

findstr :

  • r est pour les expressions et c pour que la chaîne exacte corresponde.
  • [] * est pour les espaces correspondants

netstat :

  • a -> tous
  • n -> ne résout pas (plus vite)
  • o -> pid

Cela fonctionne parce que netstat imprime le port source, puis le port de destination, puis ESTABLISHED

2
Boop

Si vous souhaitez interrompre le processus en cours d’écoute sur le port 8080, vous pouvez utiliser PowerShell. Il suffit de combiner Get-NetTCPConnection cmdlet avec Stop-Process .

Testé et devrait fonctionner avec PowerShell 5 sur Windows 10 ou Windows Server 2016. Cependant, j'imagine qu'il devrait également fonctionner sur les anciennes versions Windows sur lesquelles PowerShell 5 est installé.

Voici un exemple:

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"):
1
bahrep

Si quelqu'un cherche un script Powershell:

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

Cette fonction fait essentiellement ce que font les fonctions ci-dessus, mais elle est au format de script Powershell afin que vous puissiez l'ajouter à votre profil Powershell. Pour trouver l'emplacement de votre profil, allez à powershell et tapez echo $profile

0
watzon

Créez un fichier bat avec le contenu ci-dessous, il accepte l'entrée pour le numéro de port

@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

Enfin, cliquez sur "Entrée" pour quitter.

0

Collez ceci dans la ligne de commande

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)

Si vous souhaitez l’utiliser dans un lot pu %%P au lieu de %P

0
Eduard Florinescu

Pas:

  1. Accédez au dossier conf de votre Apache Tomcat server. Dans mon cas, son Apache-Tomcat-7.0.61\conf étant donné que j'utilise Apache-Tomcat-7.0.61

  2. Ouvrez server.xml et changez le numéro de port de 8080 à n’importe quel autre port selon vos souhaits Par exemple: 8081,8082,8087, etc.

  3. Maintenant, allez dans le dossier bin et lancez shutdown.bat

  4. Maintenant, redémarrez le serveur via Eclipse. 

Maintenant, votre projet fonctionnera sans interruption.

0
Vineetha Swathi

Similaire à la réponse de Merlyn, mais celle-ci traite également ces cas:

  • Le numéro de port est en réalité une sous-chaîne gauche d'un autre numéro de port plus long Que vous ne recherchez pas. Vous voulez rechercher un exact numéro de port afin de ne pas tuer un processus aléatoire et innocent!
  • Le code de script doit pouvoir être exécuté plusieurs fois et être correct à chaque fois, sans afficher les réponses plus anciennes et incorrectes.

C'est ici:

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.
)
0
Yavin5

si vous par le système vous ne pouvez pas finir la tâche il. essayez cette commande

x:> net stop http/y

0
Nrawut Phrommahit