Pular para o conteúdo

Localizar e Matar Determinado Processo Pelo Nome

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.
Cássio Silva Oliveira cassioso
Hits: 26.478 Categoria: Shell Script Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download process_kill_file.sh Enviar nova versão

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

Manutenção básica em partições Windows

Gerenciamento de espaço em disco

Configuração de VLANs

simulado lpi

ORACLE 10.2g - Fazendo Backup

#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

Entre na sua conta para comentar.