web-dev-qa-db-fra.com

Bash Script pour trouver et tuer un processus avec certains arguments?

Je veux un script qui tue l'instance (s) de ssh qui fonctionnent avec l'argument -D (configurant un proxy local).

Manuellement, je fais ps -A | grep -i ssh, recherchez la ou les instances avec -D, et kill -9 {id} chacun.

Mais qu'est-ce que cela ressemble à Bash Script?

(Je suis sur Mac OS X mais installera toutes les commandes nécessaires via port)

18
Ricket

Courir pgrep -f "ssh.*-D" et voir si cela renvoie l'identifiant de processus correct. Si c'est le cas, changez simplement pgrep à pkill et conserver les mêmes options et modèles

En outre, vous ne devriez pas utiliser kill -9 AKA SIGKILL, sauf absolument nécessaire, car les programmes ne peuvent pas piéger SIGKILL pour nettoyer après eux-mêmes avant de sortir. Je n'utilise que kill -9 Après avoir essayé d'abord -1-2 et -3.

27
SiegeX

Aussi,

kill `pgrep -f "ssh.*-D"`
2
Barun

Vous pouvez exploiter le système de fichiers PRO pour recueillir les informations. Par exemple:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

Ce n'est pas parfait, vous voudrez une regex plus exclusive (surtout si vous tuez des processus) mais echo $proc | awk -F'/' '{ print $3 }' vous montrera le PID du processus (ES).

0
Tok