Script de shell para -9 kill com base no nome

28

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 seguir com a -9opção kill.

mreq
fonte
2
Você pode usar -9com pkillmuito ...
parar de prejudicar Monica
6
Na minha opinião, é mais elegante e apropriado de usar do -KILLque -9. Qual número corresponde a qual sinal depende da implementação. SIGKILLacontece 9no Linux i386 e Linux amd64, mas não necessariamente em todos os lugares. ( Mais informações aqui ) .
Eliah Kagan
5
@EliahKagan: embora eu goste de usar -KILLtambém (porque torna o código mais legível), deve-se notar que SIGKILL = 9é especificado pelo POSIX , por isso -9é bastante portátil hoje em dia (e não depende de kernels ou arquiteturas).
Andrea Corbellini

Respostas:

36

Você pode usar seu shell para executar esta tarefa para você:

kill -9 $(pidof middleman)

O shell executa o comando pidof middlemanprimeiro. A saída do pidof (8) é a identificação do processo. Portanto, o shell substitui o pidofcomando-pelo ID do processo e executa kill -9 18845(ou seja qual for o ID do processo correto).

qbi
fonte
Qual é a diferença entre isso e kill -9 $(pgrep middleman)?
Aaron Franke
54

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

killall -9 middleman

Veja man killallpara mais informações e opções extras (existem algumas).

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

Gerhard Burger
fonte
2
killallpara a vitória!
Andrea Corbellini 11/01
4
matar todos os intermediários? oh querido ...
Tobias Kienzler
16

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

pkill -9 middleman

Veja man pkillpara mais informações e opções extras.

Realmente não importa qual desses métodos você usa. Todos eles funcionarão. Mas conhecer as opções se for útil, se você quiser modificar o comportamento de alguma forma, pois as páginas de manual correspondentes mostram quais outras opções correspondentes estão disponíveis.

Robie Basak
fonte
Estranho, não funciona aqui. Não fazmiddleman*
mreq
1
Ah Olhando mais de perto, parece provável que você queira matar um intérprete de rubi, em vez de um processo realmente chamado middleman. Isto é onde as diferenças em como exatamente pkill, killall, pidofe grepprocessos de jogo realmente começar a matéria!
precisa saber é o seguinte
12
pkill -9 -f middleman

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

Observe que -9deve ser um sinal de último recurso, e não algo a ser usado rotineiramente.

jlliagre
fonte
1
obrigado! Eu realmente gosto a capacidade de corresponder acomplete command line
cwd
linha de comando completa é muito legal!
22415 okwap
10

Apenas por diversão, eu gostaria de adicionar uma maneira mais manual e antiga

kill -9 `ps aux | grep middleman | awk '{print $2}'`
deslizamento
fonte
1
Eu fiz isso no trabalho há alguns anos e o administrador me deu uma olhada que dizia "tudo bem, vovô". Também é possível adicionar um grep -v grep antes do awk para garantir que ele não mate o comando grep também.
usar o seguinte comando
@gerhard, obrigado pela edição, não conseguiu encontrar os tiques no meu iPad. grep -v é uma boa idéia ...
slipset
A verdadeira maneira da velha escola seria escrever ... grep [m]iddleman ...para evitar matar o grepprocesso por acidente. Dessa forma, o grep não pode se igualar por causa de citações engraçadas.
Mikko Rantalainen
1
killall -9 -ir regex_pattern

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

Bohr
fonte