Je veux un script qui tue les instances ssh
qui sont exécutées avec l'argument -D (configuration d'un proxy local).
Manuellement, je le fais ps -A | grep -i ssh
, recherchez les instances avec -D, et kill -9 {id}
chacune.
Mais à quoi cela ressemble-t-il sous forme de script bash?
(Je suis sur Mac OS X mais j'installerai toutes les commandes nécessaires via port
)
pgrep
etpkill
sont des commandes pour rechercher ou tuer de manière fiable des processus par nom sous Solaris et Linux.Réponses:
Exécutez
pgrep -f "ssh.*-D"
et voyez si cela renvoie l'ID de processus correct. Dans le cas contraire, il suffit de changerpgrep
pourpkill
et garder les mêmes options et modèleEn outre, vous ne devez pas utiliser
kill -9
aka SIGKILL sauf si cela est absolument nécessaire car les programmes ne peuvent pas piéger SIGKILL pour nettoyer après eux-mêmes avant de quitter. Je n'utilisekill -9
qu'après avoir essayé-1
-2
et-3
.la source
for
boucle qui le faitkill -i
pour chacuni
;)pgrep
n'est pas natif sur OSX, vous devez l'obtenir auprès d'un tiers. Le fil précédent sur le sujet contient des propositions et des alternatives.-a
indicateurpgrep
auquel il imprime non seulement l'identifiant du processus mais aussi la commande (y compris les arguments). De cette façon, il est très facile de vérifier que seuls les processus souhaités correspondent.Aussi,
la source
pkill
Vous pouvez tirer parti du système de fichiers proc pour recueillir les informations. Par exemple:
Ce n'est pas parfait, vous voudrez une expression plus exclusive (surtout si vous tuez des processus) mais
echo $proc | awk -F'/' '{ print $3 }'
vous montrera le PID du ou des processus.la source
/proc
. Et il existe déjà un outil robuste pour le faire, appelépgrep
(disponible en natif au moins sur Solaris et Linux).