Script shell para -9 kill baseado no nome

25

Existe uma maneira (talvez um script) de como automatizar esse processo:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

Infelizmente, pkill é muito fraco, pois tenho que usar a opção -9 em kill .

    
por mreq 11.01.2013 / 12:10

6 respostas

33

Você pode usar seu shell para fazer isso por você:

kill -9 $(pidof middleman)

O shell executa o comando pidof middleman primeiro. A saída do pidof (8) é o id do processo. Portanto, o shell substitui o pidof -command pelo id do processo e executa kill -9 18845 (ou seja qual for o ID do processo correto).

    
por qbi 11.01.2013 / 12:19
53

Existe uma solução ainda mais simples que a do qbi: killall permite que você mate processos pelo nome, e você pode especificar sinais.

killall -9 middleman

Veja man killall para mais informações e opções extras (existem muito poucos).

Como o nome sugere, isso envia o sinal para todos os processos denominados middleman . Mas isso não é diferente de outras maneiras (como pkill ). Além disso, pkill -9 middleman segmentará processos cujo nome coincide, mas também não seja igual a middleman , como middleman2 .

    
por Gerhard Burger 11.01.2013 / 13:23
16

As outras respostas estão totalmente corretas, mas também posso adicionar uma terceira opção para que todas sejam documentadas aqui. Você também pode usar:

pkill -9 middleman

Veja man pkill para mais informações e opções extras.

Realmente não importa qual desses métodos você usa. Eles vão todos trabalhar. Mas conhecer as opções é útil se você quiser modificar o comportamento de alguma forma, já que as man pages correspondentes mostram quais outras opções de correspondência estão disponíveis.

    
por Robie Basak 11.01.2013 / 14:48
12
pkill -9 -f middleman

A opção -f faz com que ela corresponda à linha de comando completa, em vez de apenas ao nome do processo.

Note que -9 deve ser um sinal de último recurso, não algo para ser usado rotineiramente.

    
por jlliagre 11.01.2013 / 23:12
9

Apenas por diversão, gostaria de adicionar um método mais manual e antigo

kill -9 'ps aux | grep middleman | awk '{print }''
    
por slipset 11.01.2013 / 18:39
1
killall -9 -ir regex_pattern

que é interativo (seguro) e corresponde ao nome do comando parcial.

    
por Bohr 28.05.2013 / 04:54