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.


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).


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.


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.


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.


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}'`

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.