Mate vários processos por nome em vez de pid

Mate vários processos por nome em vez de pid

Eu tenho um trabalho que gera de 2 a 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 killtodos eles. O verdadeiro truque é que estou usandoAnsiblepara enviar comandos ad-hoc através de dezenas de servidores, é por isso que chamar cada 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 correria kill 1031 1032. Existe um comando limpo que poderia realizar o trabalho?

Responder1

A resposta do @jjlin pode funcionar.

Mas para explicar o funcionamento de pgrep/pkille killall:

Killall procuranomes de processosapenas - essa é a parte vista em/proc/<pid>/comm

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

Basicamente, por padrão, apenas as strings vistas em ps -Asão consideradas.

exemplo:

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

agora - kilall/pkil sshdfuncionaria (erros de digitação intencionais, não faça isso;)
mas killall /usr/sbin/sshdfuncionariaNão funcionaporque o caminho não faz parte do nome do processo
que você pode verificar pgrep -lf sshd_config(ou seja, pkill -f)

Então, aqui estão outras coisas a considerar. Killallpode corresponder apenas aos primeiros 15 bytes de um nome de comando (consulte Recursos 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 nulos, portanto, tome cuidado ao copiar/colar

Responder2

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 grep, captura o PID e passa-o para kill -9.

Teste antes de usar o kill -9

Responder3

Tentar

pkill start-cacheable.bash

Responder4

Você pode usar

killall <process name>

informação relacionada