Elimine um processo baseado em partes do seu nome em ssh (resultados diferentes ao executar a sessão ssh interativa)

2

Estou tentando fazer:

Ajustando o pid do processo com base em algo que desejo, digamos "Nome":

pid=(ps aux | grep '[Ń]ame' | awk '{print $2}' | head -1)

Então mate-o

kill $pid

Isso funciona bem se eu fizer login na máquina com o ssh, mas quero fazê-lo a partir de um script. E não funciona então:

ssh hostname "pid=\$(ps aux | grep '[N]ame' | awk '{print $2}' | head -1); echo \$pid"
root 11203 1.5 0.8 6961292 135420 pts/0 Sl 16:52 0:04 java -XX:PermSize=256m -XX:MaxPermSize=512m -Dproperties....

Eu gostaria de saber uma maneira de fazer isso e por que os resultados são diferentes ao fazer o comando, como no último caso.

    
por Erik 11.07.2013 / 17:01

2 respostas

1

Você pode usar o pgrep para simplificar a pesquisa e canalizar o resultado com xargs para remover o uso de vars, como:

ssh hostname "pgrep emacs | head -1 | xargs echo"

Seu problema principal é que o bash tenta avaliar $ 2 no comando ssh. Isso resulta em um espaço em branco, então interpreta que você deseja canalizar 'awk' {print} 'em seu lugar. Você também pode tentar executar com outro caractere de escape:

ssh hostname "pid=\$(ps aux | grep '[N]ame' | awk '{print \}' | head -1); echo \$pid"

Essa versão funciona.

    
por 11.07.2013 / 17:25
1

killall tem uma opção -r para corresponder ao nome do processo em uma expressão regular.

-r, --regexp Interpret process name pattern as an extended regular expression.

    
por 11.07.2013 / 17:32

Tags