Je revois ce processus plusieurs fois. Je dois tuer un processus sur une machine Windows et je connais juste son port. Normalement, les étapes sont les suivantes: Trouvez le PID en regardant les ports (exemple le port 8084) Liste les processus en cours d'exécution sur les ports
netstat -a -o -n
Et puis tuez le processus sur ce port avec la commande suivante
taskkill /F /PID <pid>
Y a-t-il quelque chose comme un tuyau ou similaire que je peux utiliser sur Windows OS pour exécuter cette commande sur une seule ligne!?
findstr
(Windowsgrep
). Par exemple:netstat -a -o -n | findstr "LISTENING" | findstr ":135"
. Peut-être que cela vous rapproche un peu;)findstr
: peut correspondre au numéro de port local ou distant. (Accepter que le Q ne spécifie pas lequel.)Réponses:
Les deux
cmd.exe
et PowerShell prennent en charge les canaux d'une commande à l'autre. Dans PowerShell quelque chose comme (cela devrait être sur une seule ligne sur la ligne de commande, ou utiliser `pour échapper les sauts de ligne dans un script):Où:
Select -skip 4
saute les quatre premières lignes d'en-tête. (Select
estSelect-Object
utilisé pour exécuter SQL SELECT comme des projets d'objets.%
est l'abréviation pourForeach-Object
laquelle effectue un bloc de script sur chaque objet ($_
) du pipeline et renvoie les résultats du bloc de script au pipeline. Ici, il décompose d'abord l'entrée en un tableau de champs, puis crée un nouvel objet avec deux propriétés à partir deOriginal
la chaînenetstat
etFields
du tableau que vous venez de créer.?
est un raccourci pourWhere-Object
lequel les filtres sont basés sur le résultat d'un bloc de script. Correspondant ici à une expression régulière à la fin du deuxième champ (tous les conteneurs PowerShell sont basés sur zéro).(Tous testés sauf le dernier élément: je ne veux pas commencer à tuer les processus :-)).
En pratique, je simplifierais cela, par exemple. renvoyant juste 0 ou le PID du premier
foreach
(qui serait conçu pour ignorer les en-têtes) et filtrer sur une valeur non nulle avant d'appelertaskkill
. Ce serait plus rapide à taper mais plus difficile à suivre sans connaître PowerShell.la source
netstat
. Cela conduit à une erreur (probablement inoffensive) deERROR: The process "12345" not found.
.taskkill /F /PID [PID]
. Avec cela, quelqu'un peut tuer manuellement des tâches tant qu'il a un moyen d'obtenir le PID.Ouvrez l'invite de commande et exécutez:
Si vous voulez le faire dans un .bat, remplacez % a pour %% a .
Si vous voulez juste tuer celui qui écoute sur ce port, ajoutez (^ | find "LISTENING") à la fin de l'autre recherche.
la source
Voici une fonction pratique que vous pouvez utiliser:
https://github.com/majkinetor/posh/blob/master/MM_Network/Stop-ProcessByPort.ps1
la source