Mate vários processos pelo nome em vez de pid

0

Eu tenho um trabalho que gira 2-5 cópias de um comando no Ubuntu Server 14.04.

Estou tentando descobrir o mais simples (ou seja, uma única linha de comando em vez de um script, se possível) para kill de todos eles. O verdadeiro truque é que eu estou usando Ansible para enviar comandos ad-hoc através de dezenas de servidores, é por isso que chamar cada um processo é demorado.

Exemplo:

ps aux | grep bash 
user 1031 0.0 0.0  4444  652 ?      Ss  Aug15 0:00 /bin/sh -c /home/user/start-cacheable.bash
user 1032 0.0 0.1 12400 1432 ?      S   Aug15 0:00 /bin/bash /home/user/start-cacheable.bash
user 1327 0.0 0.3 12744 2254 tty1   S   Aug15 0:00 -bash

Agora daqui, eu corri kill 1031 1032 . Existe um comando limpo que poderia fazer o trabalho?

    
por mbb 16.08.2014 / 19:55

4 respostas

2

@jjlin answer pode funcionar.

Mas para explicar o funcionamento de pgrep/pkill e killall :

killall procura apenas por nomes de processos - essa é a parte vista em /proc/<pid>/comm

O pgrep / pkill faz por padrão o mesmo, mas também pode procurar por uma correspondência nos argumentos (-f), o que faz com que corresponda novamente a /proc/<pid>/cmdline

Basicamente, por padrão, apenas strings vistas em ps -A são consideradas.

exemplo:

process name (comm): sshd
full command/arguments (cmdline): /usr/sbin/sshd -f /etc/ssh/sshd_config

agora - kilall/pkil sshd funcionaria (erros de digitação intencionais, não faça isso;)
mas killall /usr/sbin/sshd NÃO funcionará porque o caminho não faz parte do nome do processo
você pode verificar com pgrep -lf sshd_config (ou seja, pkill -f)

Então, aqui estão outras coisas a considerar. Killall pode estar correspondendo apenas aos primeiros 15 bytes de um nome de comando (consulte killall -e ), se expressões regulares são necessárias ou se você deseja aproveitar grupos de processos, etc.

nota: os arquivos / proc / ... são delimitados por nulo, portanto cuidado durante a cópia / colagem

    
por 17.08.2014 / 11:36
2

Você pode usar isso.

ps aux | grep <your keyword> | grep -v grep | awk  '{print $2}' | xargs kill -9

Lista o (s) processo (s) correspondente (s), filtra o próprio processo do grep, pega o PID, passa-o para matar -9.

Teste antes de usar o kill -9

    
por 18.08.2014 / 01:26
1

Tente

pkill start-cacheable.bash
    
por 17.08.2014 / 10:03
0

Você pode usar

killall <process name>
    
por 16.08.2014 / 20:17