
Preciso matar um processo que contém myName
em 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 myName
for o nome do processo/executável que você deseja eliminar, você pode usar:
pkill myName
pkill
por padrão envia o SIGTERM
sinal (sinal 15). Se você quiser o SIGKILL
sinal ou 9, use:
pkill -9 myName
Se myName
nã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 -f
opçã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 SIGKILL
sinal para mais de um processo.
Responder3
Existem dois comandos muito legais pgrep
e pkill
que 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 pkill
flag -f
fechará todas as janelas do Firefox.
O -f
sinalizador é necessário especificamente para pesquisar toda a linha de comando de um processo.
Responder4
Você poderia fazer uma simples for loop
verificaçã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
.