Existe um comando do tipo Unix para matar todos os processos com um certo nome?

3

Eu rodei um script chamado "delayed_job" para um aplicativo Ruby on Rails. Uma das opções é executar este proc com um monitor separado. Quando o proc principal morre, o monitor irá gerar um novo. Eu também posso executar vários processos. Cada um terá seu próprio processo de monitoramento associado.

O script permite matar os principais processos, mas não os processos do monitor. Eu quero matar todos eles.

Um comando de:

ps -ef|grep delayed

rendimentos:

42011    29423     1  0 Sep25 ?        00:00:02 delayed_job.0_monitor                
42011    29428     1  0 Sep25 ?        00:00:02 delayed_job.1_monitor                
42011    29434     1  0 Sep25 ?        00:00:02 delayed_job.2_monitor                
42011    29437     1  0 Sep25 ?        00:00:01 delayed_job.3_monitor                
42011    23359     1 10 Oct19 ?        03:12:49 delayed_job.0                        
42011     8607     1  5 Oct19 ?        00:58:42 delayed_job.3                        
42011    21442     1 44 12:31 ?        01:02:03 delayed_job.2                        
42011    23092     1  4 14:18 ?        00:01:22 delayed_job.1                        
42011    23861 23763  0 14:51 pts/5    00:00:00 grep delayed

Eu quero matar todos eles, ou pelo menos os monitores. Como posso matar isso (com exceção do próprio comando grep)?

    
por user114055 20.10.2011 / 20:56

4 respostas

6

link tem um bom escreva a resposta usual para o unix genérico: pipe ps para grep, depois para awk, depois para xargs.

Como outro pôster mencionado, tenha cuidado com qualquer resposta simplista que lance "killall", já que ele tem um propósito radicalmente diferente no AIX e no Solaris (pelo menos) do que no Linux. Executar o killall como root no Solaris é um "evento de geração de currículo".

    
por 20.10.2011 / 21:04
3

Fora das respostas pkill e killall acima, você pode fazer o seguinte, assumindo que você quer matar o processo "foo"

ps -ef | grep [f]oo | awk {'print $1'} | xargs kill

O grep [f]oo significa que o grep não irá coincidir com o próprio comando grep, então ele irá apenas matar processos chamados "foo".

    
por 20.10.2011 / 21:20
1

Se você está rodando uma máquina linux, o comando killall parece ser o que você está procurando.

    
por 20.10.2011 / 21:01
1

pkill e killall são variantes disso.

# pkill vim

# killall vim

Ambos estenderam a documentação em seus respectivos manuais.

    
por 20.10.2011 / 21:02