Localizar e Matar Determinado Processo Pelo Nome

Publicado por Cássio Silva Oliveira 01/02/2008

[ Hits: 24.521 ]

Homepage: http://www.cassiooliveira.com

Download process_kill_file.sh




Script utilizado para matar um processo específico, identificando seu PID a partir de seu nome.


Utiliza um arquivo temporário para armazenar o PID.

  



Esconder código-fonte

#!/bin/sh
#Autor: Cássio Silva Oliveira - cassioso
# Janeiro 2008

#nome do processo
  PROCESS_NAME=WatchDog
#pasta onde o arquivo com a informação do PID do processo ficará armazenado temporariamente
  TEMP_DIR=/home/cassioso/tmp
  echo 'Parando Processo $PROCESS_NAME'
#cria o arquivo, captura o PID do processo e salva no arquivo
  PID_FILE=processtokill.pid
  ps -U root -o "%p : %a"| grep $PROCESS_NAME | grep java | awk '{ print $1 }' > $TEMP_DIR/$PID_FILE
#permite total manipulação do arquivo
  chmod 777 $TEMP_DIR/$PID_FILE
#recupera o PID do processo no arquivo
  PROCESS=`cat $TEMP_DIR/$PID_FILE`
  echo Process = $PROCESS
#mata o processo
  kill -9 $PROCESS
#remove o arquivo temporario
  rm -f $TEMP_DIR/$PID_FILE

Scripts recomendados

Um super limpador do sistema KDu

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGANDO MSG ANTIGAS DA MBOX - TODOS OS USUARIOS

Adicionando "automagicamente" usuários

duplex_record: mixando áudio do microfone e saída de áudio de um programa via P

Backup completo e automatizado da base de dados do ZODB


  

Comentários
[1] Comentário enviado por edirlf em 01/02/2008 - 07:52h

Não seria mais fácil um:

$killall -u usuário programa

falows cara.

[2] Comentário enviado por elgio em 04/02/2008 - 22:57h

Primeiro script em shell?

Como disse o edirlf, já se tem o killall que faz isto.
Ainda, no teu script não entendi porque tu usou arquivo temporário. Variáveis seriam muito melhores. Até porque ele NÃO FUNCIONA se não existir o diretório.

E porque o grep java?

Veja, este teu script soluciona apenas um problema teu, não um problema de forma genérica.

Mesmo existindo o killall:

kill -9 `ps auxc|grep PROGRAMA | sed 's/^[^ ]\+ \+\([0-9]\+\) .\+$/\1/'`

Uma linha apenas!!!!

[3] Comentário enviado por cassioso em 07/10/2008 - 11:25h

Olá,


"...Variáveis seriam muito melhores..."

Como faria para jogar a saída de um comando para uma variável?

[4] Comentário enviado por Miojo em 13/10/2009 - 18:36h

VARIAVEL=`comando`

[5] Comentário enviado por andrecanhadas em 19/05/2011 - 16:23h

Complementando o script do elgio e respondendo ao Cassiano. Que tal assim que funciona para varios:
#!/bin/sh
# inicio
echo "Digite o nome do processo:" ; read processo
kill -9 `ps auxc|grep $processo | sed 's/^[^ ]\+ \+\([0-9]\+\) .\+$/\1/'`
# fim
Salve em /usr/local/bin ou usr/bin
de permissão para executar chmod a+x nome_arquivo

[6] Comentário enviado por aleedss em 24/08/2016 - 09:39h

Neste comando para matar processos "kill -9 `ps auxc|grep $processo | sed 's/^[^ ]\+ \+\([0-9]\+\) .\+$/\1/'`" o que quer dizer: 's/^[^ ]\+ \+\([0-9]\+\) .\+$/\1/'` ? Dessa forma ele irá ler algum arquivo? Não consegui entender. Obrigado


Contribuir com comentário