Dans Windows, que peut rechercher le port 8080 et essayer de tuer le processus qu'il utilise via un fichier .BAT?
Dans Windows, que peut rechercher le port 8080 et essayer de tuer le processus qu'il utilise via un fichier .BAT?
Réponses:
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 êtes sûr de 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 légèrement cela pour différents systèmes d'exploitation. Par exemple, sur Windows 7, vous pourriez avoir besoin à la tokens=5
place de tokens=4
.
Comment ça marche
FOR /F ... %variable IN ('command') DO otherCommand %variable...
Cela vous permet d'exécuter command
et de boucler sa sortie. Chaque ligne sera remplie %variable
et peut être étendue otherCommand
autant de fois que vous le souhaitez, où vous le souhaitez. %variable
en utilisation réelle ne peut avoir qu'un nom à une seule lettre, par exemple %V
.
"tokens=4 delims= "
Cela vous permet de diviser chaque ligne par un espace, de prendre le 4ème morceau de cette ligne et de le remplir %variable
(dans notre cas, %%P
). delims
semble vide, mais cet espace supplémentaire est en fait significatif.
netstat -a -n -o
Exécutez-le et découvrez-le. Selon l'aide de la ligne de commande, il "Affiche toutes les connexions et tous 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 cela a fonctionné :)
^|
Cela prend la sortie de la première commande ou programme ( netstat
) et la transmet à un deuxième programme de commande ( findstr
). Si vous l'utilisiez directement sur la ligne de commande, au lieu de l'intérieur d'une chaîne de commande, vous utiliseriez à la |
place de ^|
.
findstr :8080
Cela filtre toute sortie qui y est passée, 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 sur l'invite de commande, vous utiliseriez à la %P
place.
HELP FOR
sur la ligne de commande pour voir beaucoup d'autres options qui FOR
vous donnera, et vérifier netstat -?
, findstr /?
et TaskKill /?
pour encore plus d' aide.
tokens=4
est Windows XP je pense et tokens=5
Windows 7. Aussi une bonne idée pour /F
forcer la mise à mort.
Ouvrez l'invite de commande 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
Pour trouver un processus spécifique sur la 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, utilisez la commande ci-dessous ici 21424 est l'identifiant du processus
taskkill /pid 21424 /F
L'utilisation de la solution de Merlyn a causé la mort d'autres applications comme Firefox. Ces processus utilisaient le même port, mais pas comme é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" au findstr comme suit:
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
Pour répertorier tous les processus exécutés 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
Merci à tous, juste pour ajouter que certains processus ne se fermeront que si le commutateur de force / F est également envoyé avec TaskKill. Également avec le commutateur / T, tous les threads 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 sera nécessaire d'obtenir le nom du service et d'exécuter:
sc stop ServiceName
Juste pour terminer:
Je voulais tuer tous les processus connectés à un port spécifique mais pas le processus en écoute
la commande (dans le shell cmd) pour le port 9001 est:
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr :
netstat :
Cela fonctionne parce que netstat imprime le port source puis le port de destination, puis ESTABLISHED
Créé 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.
Si vous souhaitez arrêter le processus qui écoute sur le port 8080, vous pouvez utiliser PowerShell. Get-NetTCPConnection
Combinez simplement l' applet de commande avec Stop-Process
.
Testé et devrait fonctionner avec PowerShell 5 sur Windows 10 ou Windows Server 2016. Cependant, je suppose qu'il devrait également fonctionner sur les anciennes versions de 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"):
Similaire à la réponse de Merlyn, mais celle-ci gère également ces cas:
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.
)
Pas:
Accédez au conf
dossier de votre serveur apache tomcat . Dans mon cas, c'est apache-tomcat-7.0.61\conf
comme j'utilise apache-tomcat-7.0.61
Ouvrez server.xml
et changez le numéro de port de 8080 à n'importe quel autre port comme vous le souhaitez. Par exemple: 8081,8082,8087 etc.
Maintenant, allez dans le bin
dossier et exécutezshutdown.bat
Redémarrez maintenant le serveur via eclipse.
Maintenant, votre projet fonctionnera sans aucune interruption.
Si quelqu'un recherche 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, accédez à PowerShell et tapezecho $profile
netstat
.
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 batch pu %%P
au lieu de%P
netstat
outil est traduit dans d'autres langues
si vous par système, vous ne pouvez pas terminer la tâche. essayez cette commande
x:> arrêt net http / y