Como posso encerrar um processo com uma frase no nome?

Como posso encerrar um processo com uma frase no nome?

Preciso matar um processo que contém myNameem sua descrição. Atualmente estou fazendo:

ps -ax |grep myName
I see PID
kill -9 PID

Como posso fazer o mesmo com um comando sem inserir o PID?

Responder1

Se myNamefor o nome do processo/executável que você deseja eliminar, você pode usar:

pkill myName

pkillpor padrão envia o SIGTERMsinal (sinal 15). Se você quiser o SIGKILLsinal ou 9, use:

pkill -9 myName

Se myNamenão for o nome do processo ou, por exemplo, for um argumento para outro comando (longo), pkill(ou pgrep) poderá não funcionar conforme o esperado. Então você precisa usar a -fopção.

De man kill:

-f, --full
              The pattern is normally only matched against the  process  name.
              When -f is set, the full command line is used.
NOTES
The process name used for matching is limited to the 15 characters present
   in the output of /proc/pid/stat.  Use the -f option to match  against  the
   complete command line, /proc/pid/cmdline.

Então:

pkill -f myName

ou

kill -9 $(pgrep -f myName)

Responder2

Com o nome de um comando, use:

pkill -9 myscript

Se você estiver procurando por uma string na linha de comando:

kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')

Devo avisar: o comando acima pode enviar um SIGKILLsinal para mais de um processo.

Responder3

Existem dois comandos muito legais pgrepe pkillque permitem inserir o termo de pesquisa ou parte do nome do comando, e fornecerão o (s) PID (s) do processo ou (no caso de pkill) encerrar esse processo.

$ pgrep -f firefox                                                             
23699

Executar o mesmo comando com pkillflag -ffechará todas as janelas do Firefox.

O -fsinalizador é necessário especificamente para pesquisar toda a linha de comando de um processo.

Responder4

Você poderia fazer uma simples for loopverificação de todos os PIDs associados ao nome do processo específico, assim:

$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done

Isso matará todos os processos que contêm a palavra: myName.

informação relacionada