
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 kill
todos 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/pkill
e 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 -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
funcionariaNã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. Killall
pode 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>