Tuer un processus en regardant le Port utilisé par lui à partir d'un.Chauve-souris

dans Windows ce qui peut chercher le port 8080 et essayer de tuer le processus qu'il utilise à travers un .Le dossier BAT?

116
demandé sur Premraj 2011-06-01 19:51:30

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.

127
répondu Merlyn Morgan-Graham 2011-12-01 03:01:44

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é

186
répondu Mohit Singh 2015-10-14 12:09:14

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 
49
répondu Girdhar Singh Rathore 2017-02-28 08:50:38

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
19
répondu Solubris 2013-12-17 15:09:42

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

16
répondu Sardesh Sharma 2017-05-19 04:10:31

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

12
répondu xtrm 2012-11-19 11:38:22

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

2
répondu Boop 2014-07-01 08:42:35

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"):
1
répondu bahrep 2016-11-02 19:37:46

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.
)
0
répondu Yavin5 2012-11-13 21:21:57

Suit:

  1. Aller à conf de votre dossier apache tomcat server. Dans mon cas, son apache-tomcat-7.0.61\conf comme j'utilise apache-tomcat-7.0.61

  2. ouvrir server.xml et changer le numéro de port de 8080 à tout autre port que vous souhaitez. Par exemple: 8081,8082,8087 etc

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

  4. redémarrez maintenant le serveur par eclipse.

maintenant votre projet fonctionnera sans interruption.

0
répondu Vineetha Swathi 2015-07-12 14:36:51

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

0
répondu watzon 2016-04-11 21:46:52

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

0
répondu Eduard Florinescu 2018-02-12 22:10:57

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

x:> NET stop http / y

0
répondu Nrawut Phrommahit 2018-04-16 12:34:58