Dans Windows, que peut rechercher le port 8080 et tenter de supprimer le processus utilisé via un fichier .BAT?
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
.
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
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
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
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
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
Cherchez quel processus écoute le port: Comment pouvez-vous savoir quel processus écoute sur un port sous Windows?
Kill it: Un moyen d'écrire un fichier Windows .bat pour tuer des processus?
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 :
netstat :
Cela fonctionne parce que netstat imprime le port source, puis le port de destination, puis ESTABLISHED
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"):
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
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.
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
Pas:
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
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.
Maintenant, allez dans le dossier bin
et lancez shutdown.bat
Maintenant, redémarrez le serveur via Eclipse.
Maintenant, votre projet fonctionnera sans interruption.
Similaire à la réponse de Merlyn, mais celle-ci traite é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.
)
si vous par le système vous ne pouvez pas finir la tâche il. essayez cette commande
x:> net stop http/y