2016-07-17 1 views
1

Quand je veux tuer un processus sur un port donné (sans dire 8000) J'utilise la commande suivante:Fermer plusieurs ports à la fois

kill -9 `lsof -i :8000` 

Est-il possible de fermer plusieurs ports à la fois? Je dois tuer le processus sur les ports 8000-9000 et le faire à la main est assez inefficace.

+0

Connaissez-vous les scripts bash? Si vous créez un script de ce qui précède, prendre la plage de ports comme paramètre d'entrée (s), et de manipuler la ligne que vous avez ci-dessus slighty, pour utiliser votre paramètre d'entrée, vous êtes à la maison :) – mattias

+0

@mattias Je ne Je sais beaucoup, mais si vous connaissez un tutoriel, je suis heureux d'apprendre! – Ziva

+0

Est-ce que votre commande ci-dessus fonctionne btw? Quelle version d'OS X utilisez-vous? – mattias

Répondre

1

Ok, première tentative pour vous donner un script de travail pour cela.

#!/bin/bash 
for i in {8000..9000} 
do 
    kill -kill `lsof -t -i tcp:$i` 
done 

Mettre le dessus dans un fichier .sh, myportrangekiller.sh et le rendre exécutable, chmod +x myportrangekiller.sh et l'exécuter avec $ ./myportrangekiller.sh à partir de votre terminal. Ceci effectuera une boucle sur les ports 8000-9000 et supprimera ces processus.

dur pour moi vérifier si cela fonctionne, comme je reçois ce qui suit lors de l'exécution de votre commande dans OS X El Capitan,

kill: utilisation: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... ou kill -l [sigspec]

BTW, j'ai changé votre commande légèrement, lost-lost, sorte de supposer que vous avez mal orthographié le nom de ce binaire.

+2

Je vous pense ne voulez probablement pas pour créer et exécuter un millier de 'processus de lsof', et vous pourriez être mieux d'utiliser une plage de ports avec' lsof -i -t tcp: 8000-9000' –

+0

Eh bien, il est juste un one-liner et pas besoin de ma mauvaise tentative de boucle sur la commande initiale OP. @Ziva, pouvez-vous vérifier que le commentaire ci-dessus fonctionne? – mattias