it-swarm-pt.tech

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

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, procure as instâncias com -D e kill -9 {id} cada um.

Mas como é isso na forma de script bash?

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

18
Ricket

Corre 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 prender o SIGKILL a limpar depois de sair antes de sair. Eu só uso kill -9 depois da primeira tentativa -1-2 e -3.

27
SiegeX

Além disso,

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

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ê desejará uma regex mais exclusiva (especialmente se estiver matando processos), mas echo $proc | awk -F'/' '{ print $3 }' mostrará o PID do (s) processo (s).

0
Tok