Tuer un processus en regardant le Port utilisé par lui à partir d'un.Chauve-souris
14 réponses
Voici une commande pour vous lancer:
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 batch, supprimez @ECHO
.
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
notez que vous pourriez avoir besoin de modifier ce légèrement pour différents OS. Par exemple, sur Windows 7, vous pourriez avoir besoin de tokens=5
au lieu de tokens=4
.
comment cela fonctionne
FOR /F ... %variable IN ('command') DO otherCommand %variable...
cela vous permet d'exécuter command
, et boucle sur sa sortie. Chaque ligne sera empaillée dans %variable
, et peut être étendue dans otherCommand
autant de fois que vous le souhaitez, où que vous le souhaitez. %variable
en usage réel ne peut avoir qu'un nom à une seule lettre, par exemple %V
.
"tokens=4 delims= "
cela vous permet de diviser chaque ligne par espace, et de prendre le 4ème morceau dans cette ligne, et stuffs il en %variable
(dans notre cas, %%P
). delims
semble vide, mais que l'espace supplémentaire est réellement important.
netstat -a -n -o
lance-le et trouve. Selon l'aide en 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'identifiant du processus associé à chaque connexion.". J'ai juste utilisé ces options puisque quelqu'un d'autre l'a suggéré, et il se trouve que ça a fonctionné:)
^|
Cela prend la sortie de la première commande ou programme ( netstat
) et le transmet à un programme de deuxième commande ( findstr
). Si vous utilisiez ceci directement sur la ligne de commande, au lieu de l'intérieur d'une chaîne de commande, vous utiliseriez |
au lieu de ^|
.
findstr :8080
ceci filtre toute sortie qui y est passée, en retournant seulement les lignes qui contiennent :8080
.
TaskKill.exe /PID <value>
cela tue une tâche en cours d'exécution, en utilisant le numéro de processus.
%%P instead of %P
ceci est requis dans les fichiers de lots. Si vous avez fait cela à l'invite de commande, vous utiliserez %P
à la place.
ouvrir l'invite de commande et exécuter 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 le numéro du procédé
pour trouver le processus spécifique sur la ligne de commande utiliser la commande ci-dessous 8080 est le port utilisé par le processus
netstat -ano | findstr 8080
pour tuer les processus utiliser la commande ci-dessous ici 21424 est l'id de processus
taskkill /pid 21424 /F
utilisant la solution de Merlyn a causé d'autres applications à être tué comme firefox. Ces processus utilisaient le même port, mais pas en tant qu'auditeur:
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
peut donc 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 lister tout le processus en cours sur le port 8080, faites ce qui suit.
netstat -ano / find "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612
TCP [::]:8080 [::]:0 LISTENING 10612
puis pour tuer le processus exécuter la commande suivante
taskkill / f / PID 10612
merci à tous, juste pour ajouter qu'un processus ne se fermera pas à moins que le /f force switch soit aussi envoyé avec TaskKill. Aussi avec / t switch, tous les fils 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
regardez quel processus écoute le port: Comment Pouvez-vous savoir quel processus écoute sur un port sous Windows?
Tuer: de Toute façon d'écrire une Windows .le fichier bat pour tuer les processus?
Juste pour la fin:
je voulais tuer tous les processus connectés à un port spécifique mais pas le processus d'écoute
la commande (en 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 :
- r est pour les expressions et c pour la chaîne exacte.
- [ ]* pour la mise en correspondance des espaces
netstat :
- a - > tous
- n -> ne pas résoudre (plus rapide)
- o - > pid
cela fonctionne parce que netstat imprime le port source puis le port de destination et ensuite établi
si vous voulez tuer le processus qui é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, je suppose qu'il devrait également fonctionner sur les versions Windows plus anciennes qui ont PowerShell 5 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"):
semblable à la réponse de Merlyn, mais celui-ci s'occupe aussi de ces cas:
- le numéro de port est en fait une sous-couche gauche d'un autre port plus long numéro que vous ne cherchez pas. Vous souhaitez rechercher un exact numéro de port, de sorte que vous ne tuez pas un hasard, innocent!
- le code de script doit être capable d'exécuter plus d'une fois et d'être correct à chaque fois, ne pas afficher l'ancien, incorrect réponse.
le voici:
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.
)
Suit:
-
Aller à
conf
de votre dossier apache tomcat server. Dans mon cas, sonapache-tomcat-7.0.61\conf
comme j'utilise apache-tomcat-7.0.61 -
ouvrir
server.xml
et changer le numéro de port de 8080 à tout autre port que vous souhaitez. Par exemple: 8081,8082,8087 etc -
maintenant, allez dans le dossier
bin
et lancezshutdown.bat
-
redémarrez maintenant le serveur par eclipse.
maintenant votre projet fonctionnera sans interruption.
si quelqu'un est à la recherche d'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 les fonctions ci-dessus font, mais il est dans le format de script Powershell de sorte que vous pouvez l'ajouter à votre profil Powershell. Pour trouver l'emplacement de votre profil, allez à powershell et tapez echo $profile
coller 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
si vous par système vous ne pouvez pas terminer la tâche. essayez cette commande
x:> NET stop http / y