135 votes

Tuer un Processus en Recherchant le Port utilisé par de un .Chauve-souris

Dans Windows, ce qui peut regarder pour le port 8080 et d'essayer de tuer le processus, il est utilisé par un .Fichier BAT?

153voto

Merlyn Morgan-Graham Points 31815

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 confiant dans votre fichier de commandes, retirez - @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 un peu pour les différents OS. Par exemple, sur Windows 7, vous pourriez avoir besoin d' 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 la boucle de sa sortie. Chaque ligne sera en peluche en %variable, et peut être étendue en otherCommand autant de fois que vous le souhaitez, où vous le souhaitez. %variable dans l'utilisation réelle ne peut avoir qu'un seul nom de la lettre, par exemple, %V.

"tokens=4 delims= "

Cela vous permet de diviser chaque ligne par des espaces, et prendre la 4ème morceau dans cette ligne, et le fourre dans %variable (dans notre cas, %%P). delims semble vide, mais que l'espace supplémentaire est réellement important.

netstat -a -n -o

Il suffit de lancer et de trouver. 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 le propriétaire de l'ID de processus associé à chaque connexion.". J'ai simplement utilisé ces options depuis quelqu'un d'autre l'a suggéré, et il est arrivé de travailler :)

^|

Cela prend la sortie de la première commande ou d'un programme (netstat) et les transmet sur un deuxième programme de commande (findstr). Si vous avez été en utilisant ce directement sur la ligne de commande, au lieu d'à l'intérieur d'une chaîne de commande, vous devez utiliser | au lieu de ^|.

findstr :8080

Ce filtre de sortie qui est passé en elle, en ne retournant que les lignes qui contiennent :8080.

TaskKill.exe /PID <value>

Cela tue une tâche en cours d'exécution, à l'aide de l'ID de processus.

%%P instead of %P

Cela est nécessaire dans des fichiers batch. Si vous avez fait ceci dans l'invite de commande, vous devez utiliser %P à la place.

23voto

Solubris Points 1805

À l'aide de Merlyn la solution causé d'autres applications à être tué, comme firefox. Ces processus ont été en utilisant 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

Par conséquent, peuvent exclus en ajoutant "à l'ÉCOUTE" à la findstr comme suit:

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

16voto

xtrm Points 567

Merci à vous tous, juste pour ajouter que certains processus de l'habitude de fermer à moins que le /F commutateur force est également envoyer avec TaskKill. Aussi avec le commutateur /T, tous les threads du processus sera fermé.

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 de l'exécuter:

sc stop ServiceName

3voto

2voto

Boop Points 1

Juste pour la fin:

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

la commande (cmd shell) 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 exacte de la chaîne de match.
  • [ ]* pour la mise en correspondance des espaces

netstat:

  • -> tous les
  • n -> ne pas résoudre (plus rapide)
  • o -> pid

Cela fonctionne parce que netstat affiche la source port, puis le port de destination et ensuite ÉTABLI

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X