Eu quero um script que mata as instâncias ssh
que são executadas com o argumento -D (configurando um proxy local).
Manualmente, ps -A | grep -i ssh
procure as instâncias com -D e kill -9 {id}
cada uma.
Mas como é isso na forma de script bash?
(Estou no Mac OS X, mas instalarei todos os comandos necessários via port
)
pgrep
epkill
são comandos para localizar ou eliminar de forma confiável processos por nome no Solaris e Linux.Respostas:
Execute
pgrep -f "ssh.*-D"
e veja se isso retorna o ID do processo correto. Se isso acontecer, simplesmente mudepgrep
parapkill
e mantenha as mesmas opções e padrõesAlém disso, você não deve usar o
kill -9
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ó usokill -9
depois de tentar-1
-2
e-3
.fonte
for
loop que fazkill -i
para cadai
;)pgrep
não é nativo no OSX, você deve obtê-lo de terceiros. O tópico anterior sobre o tópico tem propostas e alternativas.-a
sinalizador aopgrep
qual ele imprime não apenas a identificação do processo, mas também o comando (incluindo argumentos). Dessa forma, é muito fácil verificar se apenas os processos desejados são correspondidos.Além disso,
fonte
pkill
Você pode aproveitar o sistema de arquivos proc para coletar as informações. Por exemplo:
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).fonte
/proc
. E já existe uma ferramenta robusta para fazer isso, chamadapgrep
(disponível de forma nativa pelo menos no Solaris e Linux).