Script Bash para encontrar e matar um processo com certos argumentos?

16

Eu quero um script que mate as instâncias de ssh que são executadas com o argumento -D (configurando um proxy local).

Manualmente, eu faço ps -A | grep -i ssh , procuro as instâncias com -D e kill -9 {id} cada uma.

Mas o que isso parece na forma de script bash?

(Estou no Mac OS X, mas instalarei todos os comandos necessários via port )

    
por Ricket 12.01.2011 / 04:38

3 respostas

25

Execute pgrep -f "ssh.*-D" e veja se isso retorna o ID do processo correto. Se isso acontecer, basta alterar pgrep para pkill e manter as mesmas opções e padrões

Além disso, você não deve usar kill -9 aka SIGKILL, a menos que seja absolutamente necessário, porque os programas não podem interceptar o SIGKILL para que eles se limpem antes de saírem. Eu só uso kill -9 depois de tentar pela primeira vez -1 -2 e -3 .

    
por 12.01.2011 / 05:04
1

Além disso,

kill 'pgrep -f "ssh.*-D"'
    
por 18.01.2011 / 14:36
0

Você pode aproveitar o sistema de arquivos proc para coletar as informações. Por exemplo:

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

Não é perfeito, você vai querer um regex mais exclusivo (especialmente se você está eliminando processos), mas echo $proc | awk -F'/' '{ print $3 }' mostrará o PID do (s) processo (s).

    
por 12.01.2011 / 15:02

Tags